述
在项目开发过程中,有很多工作是针对配置文件的,比如 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 文件中的配置