spring boot 属性配置和使用
Spring Boot 支持多种外部配置方式
这些方式优先级如下:
1. 命令行参数
2. 来自java:comp/env的JNDI属性
3. Java系统属性(System.getProperties())
4. 列表内容
5. 操作系统环境变量 RandomValuePropertySource配置的random.*属性值
6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10. @Configuration注解类上的@PropertySource
11. 通过SpringApplication.setDefaultProperties指定的默认属性
命令行参数
通过java -jar app.jar –name=”Spring” –server.port=9090方式来传递参数。
参数用–xxx=xxx的形式传递。可以用来修改端口,日志级别等信息。
注意:命令行参数在app.jar的后面! 可以通过SpringApplication.setAddCommandLineProperties(false)禁用命令行配置。
随机数RandomValuePropertySource
系统中用到随机数的地方,例如:
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
random.int*支持value参数和,max参数,当提供max参数的时候,value就是最小值。
应用配置文件(.properties或.yml)
在配置文件中直接写:
name=Isea533
server.port=8080
.yml格式的配置文件如:
name: Isea533
server:
port: 8080
注意:spring会从classpath下的/config目录或者classpath的根目录查找application.properties或application.yml。
/config优先于classpath根目录
使用属性
@Value(“${xxx}”)
这种方式是最简单的,通过@Value注解可以将属性值注入进来。
@ConfigurationProperties
Spring Boot 可以方便的将属性注入到一个配置对象中。
在@Bean方法上使用@ConfigurationProperties
例如:Spring Boot 会将foo开头的属性按照名字匹配注入到FooComponent对象中。
@ConfigurationProperties(prefix = "foo")
@Bean
public FooComponent fooComponent() {
...
}
属性占位符
例如:
app.name=MyApp
app.description=${app.name} is a Spring Boot application
可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)。
通过如${app.name:默认名称}方法还可以设置默认值,当找不到引用的属性时,会使用默认的属性。
由于${}方式会被Maven处理。如果你pom继承的spring-boot-starter-parent,Spring Boot 已经将maven-resources-plugins默认的${}方式改为了@ @方式,例如@[email protected]。
通过属性占位符还能缩短命令参数:
例如修改web默认端口需要使用–server.port=9090方式,如果在配置中写上:
server.port=${port:8080}
那么就可以使用更短的–port=9090,当不提供该参数的时候使用默认值8080。
属性名匹配规则
例如有如下配置对象:
@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {
@NotNull
private String firstName;
}
firstName可以使用的属性名如下:
person.firstName,标准的驼峰式命名
person.first-name,虚线(-)分割方式,推荐在.properties和.yml配置文件中使用
PERSON_FIRST_NAME,大写下划线形式,建议在系统环境变量中使用
属性验证
可以使用JSR-303注解进行验证,例如上例中的@NotNull
推荐阅读
-
Spring Boot 入门之消息中间件的使用
-
HTML5 visibilityState属性详细介绍和使用实例
-
Vue-router的使用和出现空白页,路由对象属性详解
-
Spring Boot使用AOP防止重复提交的方法示例
-
java 使用memcached以及spring 配置memcached完整实例代码
-
在Spring Boot中使用swagger-bootstrap-ui的方法
-
Spring boot工具类静态属性注入及多环境配置详解
-
Vue2.5学习笔记之如何在项目中使用和配置Vue
-
浅谈Spring中@Import注解的作用和使用
-
在 Spring Boot 项目中使用 activiti