Spring Boot内置很多属性,具体可以参见common-application-properties,也可以自定义属性。
设置属性
Spring Boot支持多种方式设置属性值,优先级从高到低如下:
命令行参数
即java命令行参数,只是形式稍有区别,前面增加“--
”,格式:--key[=value]
,多个用空格分隔,例如:
1 |
|
可以通过SpringApplication.setAddCommandLineProperties(false)
禁用命令行配置。
java:comp/env 里的JNDI属性
Java系统属性
格式:-Dkey=value
1 |
|
操作系统环境变量
1 |
|
1 |
|
备注:shell中有效,Eclipse中运行应用则不会读取操作系统环境变量
随机数
Spring Boot通过RandomValuePropertySource定义了随机数random供使用,例如:
1 |
|
random.int*
支持value
参数和max
参数,当提供max
参数的时候,value
就是最小值。
关于配置文件
1 |
|
备注:
application.properties优先级高于application.yaml
同名属性文件只会读取一个,比如读取了外部的application-dev.properties就不会再读取应用程序内的application-dev.properties;无Profile作为默认配置会被先读取,但是会被有Profile的覆盖。
应用程序外基于Profile的配置文件
config目录或应用根目录下application-{profile}.properties
或者appliaction-{profile}.yml
文件或者application.yml
(带spring.profiles
)
application.yml
(带spring.profiles
)样例:
1 |
|
应用程序内基于Profile的配置文件
classpath中config包或classpath根目录下application-{profile}.properties
或者appliaction-{profile}.yml
文件或者application.yml
(带spring.profiles
)
应用程序外的配置文件(默认)
不带profile的配置文件优先级较带profile的低
config目录或应用根目录下application.properties
或者appliaction.yml
文件(不带spring.profiles
)
应用程序内的配置文件(默认)
classpath中config包或classpath根目录下application.properties
或者appliaction.yml
文件(不带spring.profiles
)
通过 @PropertySource 引入的配置文件
默认属性
通过SpringApplication.setDefaultProperties
设置的默认属性,例如:
1 |
|
使用属性
@Value
1 |
|
@Value除了支持属性注入外,还支持如下参数注入:
- 注入普通字符(@Value(“hello, world”))
- 注入操作系统属性(@Value(“#systemProperties[‘os.name’]”))
- 注入表达式运算结果(@Value(“#{ T(java.lang.Math).random()*100.0 }”))
- 注入其他Bean的属性(@Value(“#{demoService.username}”))
- 注入文件内容(@Value(“classpath:text.txt”))
- 注入网址内容(@Value(“http://www.baidu.com”))
- 注入属性(@Value(“${book.name}”)),带默认值(@Value(“${book.name:abc}”))
@ConfigurationProperties
为了能够更加方便的分门别类的定义和使用属性,同时相较于@Value逐个配置,@ConfigurationProperties能够将相关属性批量自动绑定到Spring Bean上,会自动进行类型转换,还支持嵌套属性。一般有三种方式,第一种是配合@Component,第二种是配合@Bean,第三种是使用@EnableConfigurationProperties。
Note that contrary to @Value
, SpEL expressions are not evaluated since property values are externalized.
Java Bean属性配置类:
1 |
|
对应的配置如下:
1 |
|
第一种:在属性配置类上
1 |
|
第二种:绑定到@Bean,一般用于第三方Properties类【他们没有被@ConfigurationProperties注解】,例如:
1 |
|
第三种:参见@EnableConfigurationProperties
属性占位符
1 |
|
由于${*}
方式会被Maven处理。如果你pom继承的spring-boot-starter-parent
,Spring Boot 已经将maven-resources-plugins
默认的${*}
方式改为了@*@
方式,例如@name@
。
如果你是引入的Spring Boot,你可以修改使用其他的分隔符
自定义属性:
1 |
|
属性名匹配规则
1 |
|
firstName
可以使用的属性名如下:
person.firstName
,标准的驼峰式命名person.first-name
,虚线(-
)分割方式,推荐在.properties
和.yml
配置文件中使用PERSON_FIRST_NAME
,大写下划线形式,建议在系统环境变量中使用
类型
基本类型
List
my.servers
1 |
|
Map
my.map
1 |
|
或者
1 |
|
验证
可以使用JSR-303注解进行属性验证,例如:
1 |
|