• SpringBoot-03-配置之注入配置文件


    3.2 注入配置文件

    yaml更强大的地方在于,可以给实体类直接注入匹配值!

    yaml注入配置文件

    1. 在springboot项目中的resources目录下新建application.yml

    2. 编写一个实体类 Dog

      @Component
      public class Dog {
          private String name;
          private Integer age;
      }
      
    3. 思考:原来怎么给bean注入属性值,@Value

      @Component
      public class Dog {
          @Value("旺财")
          private String name;
          @Value("3")
          private Integer age;
      }
      
    4. 在SpringBoot的测试类下注入输出

      @SpringBootTest
      class Springboot02ConfigApplicationTests {
      
          @Autowired
          private Dog dog;
      
          @Test
          void contextLoads() {
              System.out.println(dog);
          }
      
      }
      
    5. 再编写一个复杂一点的实体类:Person类

      @Component
      public class Person {
          private String name;
          private Integer age;
          private boolean happy;
          private Date birth;
          private Map<String,Object> maps;
          private List<Object> lists;
          private Dog dog;
      }
      
    6. 使用yaml配置的方式进行注入,注意区别和优势

      person:
        name: huba
        age: 22
        happy: false
        birth: 2020/8/11
        maps: {k1: v1,k2: v2}
        lists:
          -code
          -music
        dog:
          name: 旺财
          age: 3
      
    7. 我们现在来注入到类中

      @Component
      @ConfigurationProperties(prefix = "person")
      public class Person {
      	...
      }
      
    8. IDEA提示,springboot配置注解处理器没有找到,我们可以查看文档,找到一个依赖!

      在这里插入图片描述

      <dependency>
      	<groupId>org.springframework.boot</groupId>
      	<artifactId>spring-boot-configuration-processor</artifactId>
      	<optional>true</optional>
      </dependency>
      
    9. 确认以上配置都ok之后,去测试类中测试一下

    加载指定的配置文件

    @PropertySource:加载指定的配置文件

    @ConfigurationProperties:默认从全局配置文件中获取值;

    1. 在resources下新建一个person.properties

      name=huba
      
    2. 在实体类上指定加载person.properties文件

      @PropertySource(value="classpath:person.properties")
      
      //    EL表达式取值
          @Value("${name}")
      
    3. 输出测试:指定配置文件绑定成功!

      在这里插入图片描述

    配置文件占位符

    配置文件还可以编写占位符生成随机数

    person:
      name: huba${random.uuid}
      age: ${random.int}
      happy: false
      birth: 2020/8/11
      maps: {k1: v1,k2: v2}
      lists:
        -code
        -music
      dog:
        name: ${person.hello:huba}_旺财
        age: 3
    

    测试输出结果:

    在这里插入图片描述

    对比小结

    在这里插入图片描述

    1. @Configuration只需要写一次即可,@Value则每个字段都需要;
    2. 松散绑定:yml中的last-name,这个和lastName是等价的,-后面的字母默认是大写的;
    3. JSR303数据校验,它就是在字段增加一层过滤器验证,可以保证数据的合法性;
    4. 复杂类型封装,yml可以封装对象;

    结论:

    • 推荐yml
    • 如果只需要获取配置文件的某个值,可以使用@Value
    • 如果专门编写一个JavaBean来和配置文件一一映射,就直接@ConfigurationProperties,不要犹豫!
  • 相关阅读:
    php实现cookie加密解密
    三个php加密解密算法
    一个经典的PHP加密解密算法
    Webpack 核心模块 tapable 解析(转)
    详解基于vue,vue-router, vuex以及addRoutes进行权限控制
    编写一个插件
    详解css3 pointer-events(阻止hover、active、onclick等触发事件来
    Dockerfile HEALTHCHECK详解
    Dockerfile 指令 WORKDIR介绍
    NPM私有包部署到私有仓库
  • 原文地址:https://www.cnblogs.com/CodeHuba/p/13719899.html
Copyright © 2020-2023  润新知