述
在项目开发过程中,有很多工作是针对配置文件的,比如 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
2environment:
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.properties
和 application.yml
jar包内的application配置文件
位于当前应用jar包之内的 application.properties
和 application.yml
@PropertySource注解
在 @Configuration
注解修改的类中,通过 @PropertySource
注解定义的属性
硬编码方式配置的属性
通过 SpringApplication.setDefaultProperties
定义的内容
总结
Spring Boot 中属性配置就以上几种方式,当然也可以通过我们之前的系统初始化器去配置. 以上几种方式的优先级如下:
- 命令行中传入的参数
SPRING_APPLICATION_JSON
中的属性- java:comp/env中的JNDI属性
- Java的系统属性,可以通过
System.getProperties()
获得的内容. - 操作系统的环境变量
- 通过
random.*
配置的随机属性 - 位于当前应用jar包之外,针对不同{profile}环境的配置文件内容
- 位于当前应用jar包之内,针对不同{profile}环境的配置文件内容
- 位于当前应用jar包之外的
application.properties
和YAML配置内容 - 位于当前应用jar包之内的
application.properties
和YAML配置内容 - 在
@Configuration
注解修改的类中, 通过@PropertySource
注解定义的属性 - 应用默认属性,使用
SpringApplication.setDefaultProperties
定义的内容
以上几种方式数字越小优先级越高, 另外 properties 文件和 yml 文件同时存在的话,会使用 properties 文件中的配置