SpringBoot (一) 配置文件

Spring Boot 配置文件

一.properties 和yml 配置文件

  1. 同路径下优先级 properties > yml, properties会有中文乱码的情况

  2. 针对同数据结构之间的表示方式不同

    • 例子:

      properties:

      # 普通数据
      person.name=yu
      person.age=11
      # map
      person.map.k1=v1
      person.map.k2=v2
      person.list=1,2,3    
      
    • yml

      person:
         name: yu
         age: 11
         map:
           k1: v1
           k2: v2
         map1: {k1: v1,k2: v2}
         list: [1,2,3] 
      
    • 针对java对象实例,引用配置文件的数据

      @Component
       @ConfigurationProperties(prefix = "person") 
       @Data
       @ToString
       public class Person {
           @Value("${person.age}")
           private String name;
           private Integer age;
           private Map<String,String> map;
           private List<Object> list;
           }
      
      输出结果: Person(name=yu, age=11, map={k1=v1, k2=v2}, list=[1, 2, 3])
      

    ​ 使用 @ConfigurationProperties(prefix = “person”) 获取配置文件中指定前缀的数据

    ​ 使用@value("${}")可以获取指定的数据,下面的例子可以看出来

    @ConfigurationProperties > @value

    ​ @value 对复杂的数据结构不支持

二. 引用配置文件数据

1.@ConfigurationProperties@value

  • 使用 @ConfigurationProperties(prefix = “person”) 获取配置文件中指定前缀的数据
  • 使用@value("${}")可以获取指定的数据,下面的例子可以看出来
  • @ConfigurationProperties > @value
  • @value 对复杂的数据结构不支持

2.@propertySource 获取指定配置文件的数据

  • properties:
person.name=haha
person.age=11
  • java:
  @Component
   @ConfigurationProperties(prefix = "person") 
   @PropertySource(value = {"classpath:person.properties"})
   @Data
   @ToString
   public class Person {
       private String name;
       private Integer age;
       private Map<String,String> map;
       private List<Object> list;
   }

   输出结果: Person(name=haha, age=11, map=null, list=null)

3. 配置文件占位符

可以使用 ${} 占位符使用数据,可以使用配置文件的其他数据

  • properties

    person.name=${person.age}鱼${random.int(10)} 随机数计算
    person.age=11
    
  • java

    @Service("person")
    @ConfigurationProperties(prefix = "person")
    @Data
    @ToString
    public class Person {
        private String name;
        private Integer age;
        private Map<String,String> map;
        private List<Object> list;
    
    }
    结果为: Person(name=117, age=11)
    

三. 多profiles 配置

application-{profile}.properties /yml

激活 dev:

  1. 主配置文件中指定 :spring.profiles.active=dev
  2. 使用命令行 java -jar springboot.jar --spring.profiles.active=dev
  3. vm参数:-Dspring.profiles.active=dev

四. 配置文件的加载优先级

  • file:./config

  • file:./

  • classpath:/config/

  • classpath:/

    优先级从高到低,高优先级配置覆盖低优先级

五.外部配置加载顺序

SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

1.命令行参数

所有的配置都可以在命令行上进行指定

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc

多个配置用空格分开; --配置项=值

2.来自java:comp/env的JNDI属性

3.Java系统属性(System.getProperties())

4.操作系统环境变量

5.RandomValuePropertySource配置的random.*属性值

由jar包外向jar包内进行寻找;

优先加载带profile

6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

再来加载不带profile

8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件

9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件

10.@Configuration注解类上的@PropertySource

11.通过SpringApplication.setDefaultProperties指定的默认属性

所有支持的配置加载来源;

发布了47 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/oschina_40730821/article/details/102746309