欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring boot 属性配置和使用

程序员文章站 2022-05-02 08:16:40
...

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