Spring Boot-10-属性配置

在项目开发过程中,有很多工作是针对配置文件的,比如 Spring Boot 提供的一些属性,还有我们自定义的一些配置,下面就来了解一下 Spring Boot 中的属性配置的几种方式

命令行配置方式

我们在服务器中手动启动一个jar包的时候,用的命令,比如是 java -jar xxx.jar ,在这个命令后面,我们可以通过 -- 的做一些属性配置, 比如说要修改端口号 java -jar xxx.jar --server.port=8888 ,这种方式就相当于是在 application 配置文件中指定端口号为 8888 ,在命令行方式启动 Spring Boot 应用时,连续的两个减号 -- 就是对 application 配置文件中的属性值进行赋值的标识.

SPRING_APPLICATION_JSON

类似命令行的配置方式, 在运行命令后添加 --SPRING_APPLICATION_JSON={\"xxxx\":\"xxx\"} ,以json的格式配置,这种方式不是很常用

java:comp/env中的JNDI属性

基本上不用,不做介绍

Java系统属性

就是可以通过 System.getProperties() 获得的内容

操作系统的环境变量

举个例子,我们系统中有 JAVA_HOME 这个环境变量, application 配置文件中做出如下配置:

1
java.home.path: #{JAVA_HOME}

然后系统启动之后,获取 java.home.path 的值就是,系统环境变量中的 JAVA_HOME 的值

通过random.*配置的随机属性

application 配置文件如下:

1
2
environment:
test: ${random.int[30,40]}

系统启动之后获取 environment.test 的值,就是一个 30-40 内的随机数

jar包外的{profile}配置文件

位于当前应用jar包之外,针对不同 {profile} 环境的配置文件内容,例如: application-dev.properties 或是 application-dev.yml

jar包内的{profile}配置文件

位于当前应用jar包之内,针对不同 {profile} 环境的配置文件内容,例如: application-dev.properties 或是 application-dev.yml

jar包外的application配置文件

位于当前应用jar包之外的 application.propertiesapplication.yml

jar包内的application配置文件

位于当前应用jar包之内的 application.propertiesapplication.yml

@PropertySource注解

@Configuration 注解修改的类中,通过 @PropertySource 注解定义的属性

硬编码方式配置的属性

通过 SpringApplication.setDefaultProperties 定义的内容

总结

Spring Boot 中属性配置就以上几种方式,当然也可以通过我们之前的系统初始化器去配置. 以上几种方式的优先级如下:

  1. 命令行中传入的参数
  2. SPRING_APPLICATION_JSON 中的属性
  3. java:comp/env中的JNDI属性
  4. Java的系统属性,可以通过 System.getProperties() 获得的内容.
  5. 操作系统的环境变量
  6. 通过 random.* 配置的随机属性
  7. 位于当前应用jar包之外,针对不同{profile}环境的配置文件内容
  8. 位于当前应用jar包之内,针对不同{profile}环境的配置文件内容
  9. 位于当前应用jar包之外的 application.properties 和YAML配置内容
  10. 位于当前应用jar包之内的 application.properties 和YAML配置内容
  11. @Configuration 注解修改的类中, 通过 @PropertySource 注解定义的属性
  12. 应用默认属性,使用 SpringApplication.setDefaultProperties 定义的内容

以上几种方式数字越小优先级越高, 另外 properties 文件和 yml 文件同时存在的话,会使用 properties 文件中的配置