spring boot属性配置
spring Boot 属性配置和使用
Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置。
Spring Boot 支持多种外部配置方式
这些方式优先级如下:
1.命令行参数
2.来自java:comp/env的JNDI属性
3.Java系统属性(Properties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
6.jar包外部的application-{profile}.properties或l(带spring.profile)配置文件
7.jar包内部的application-{profile}.properties或l(带spring.profile)配置文件
8.jar包外部的application.properties或l(不带spring.profile)配置文件
9.jar包内部的application.properties或l(不带spring.profile)配置文件
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性
命令行参数
通过Java -jar app.jar --name="Spring" --server.port=9090方式来传递参数。
参数用--xxx=xxx的形式传递。
可以使用的参数可以是我们自己定义的,也可以是Spring Boot中默认的参数。
很多人可能会关心如web端口如何配置这样的问题,这些都是Spring Boot中提供的参数,部分可用参数如下:
# LOGGING
logging.path=/var/logs
logging.file=myapp.log
logging.level.*= # levels for loggers, e.g. "springframework=DEBUG" (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF)
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8080
server.address= # bind to a specific NIC
server.session-timeout= # session timeout in seconds
server.servlet-path= # the servlet path, defaults to '/'
注意:命令行参数在app.jar的后面!
可以通过SpringApplication.setAddCommandLineProperties(false)禁用命令行配置。
Java系统属性
注意Java系统属性位置java -Dname="isea533" -jar app.jar,可以配置的属性都是一样的,优先级不同。
例如java -Dname="isea533" -jar app.jar --name="Spring!"中name值为Spring!
操作系统环境变量
配置过JAVA_HOME的应该都了解这一个。
这里需要注意的地方,有些OS可以不支持使用.这种名字,如server.port,这种情况可以使用SERVER_PORT来配置。具体名字如何匹配,看本文后面。
RandomValuePropertySource
系统中用到随机数的地方,例如:
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.number.=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
random.int*支持value参数和,max参数,当提供max参数的时候,value就是最小值。
springboot是啥
应用配置文件(.properties或.yml)
在配置文件中直接写:
name=Isea533
server.port=8080
.yml格式的配置文件如:
name: Isea533
server:
port: 8080
当有前缀的情况下,使用.yml格式的配置文件更简单。
注意:使用.yml时,属性名的值和冒号中间必须有空格,如name: Isea533正确,name:Isea533就是错的。
属性配置文件的位置
spring会从classpath下的/config目录或者classpath的根目录查application.properties或l。/config优先于classpath根目录
@PropertySource
这个注解可以指定具体的属性配置文件,优先级比较低。
SpringApplication.setDefaultProperties
例如:
SpringApplication application = new SpringApplication(Application.class);
Map<String, Object> defaultMap = new HashMap<String, Object>();
defaultMap.put("name", "Isea-Blog");
//还可以是Properties对象
application.setDefaultProperties(defaultMap); application.run(args);
应用(使用)属性
@Value(“${xxx}”)
这种方式是最简单的,通过@Value注解可以将属性值注入进来。@ConfigurationProperties
Spring Boot 可以方便的将属性注入到一个配置对象中。例如:my.name=Isea533
my.port=8080
my.servers[0]=dev.bar
my.servers[1]=foo.bar
对应对象:
Spring Boot 还支持嵌套属性注入,例如:name=isea533
jdbc.username=root
jdbc.password=root
...
对应的配置类: