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 | |