简介:
springBoot可以通过多种方式设置参数,其优先级如下:
- 如果使用了devtools,则以home目录下的
~/.spring-boot-devtools.properties
为主 @TestPropertySource
注解的测试@SpringBootTest#properties
注解的测试- 命令行参数
SPRING_APPLICATION_JSON
提供的属性(JSON格式,从环境变量或者系统属性中获取)- ServletConfig配置的属性
- ServletContext配置的属性
- JNDI配置的属性,(java:comp/env)
- Java 系统属性,
System.getProperties()
- 系统环境变量
RandomValuePropertySource
进针对于random.*
- jar包外部指定profile文件,例如application-{profile}.properties(YAML 同)
- jar包内部的指定profile文件
- 应用外部的application.properties
- 应用内部的application.properties
@PropertySource
注解- 默认属性(
SpringApplication.setDefaultProperties()
) 例如:
本篇文章主要是针对配置文件和部分注解的使用;
实践:
1.配置多个环境
一般开发,测试,到生产会有多个环境,每个环境会存在一些配置信息在各个环境不一致,这些配置信息即可复制成多份;再application.properties中使用spring.profiles.active来指定环境;
2.配置文件中参数配置
a.一般参数形式及参数间的相互使用:
#测试参数的引用
pers.cc.properties.params.name=age
pers.cc.properties.params.value=18
pers.cc.properties.params.desc=${pers.cc.properties.params.name}:${pers.cc.properties.params.value}
b.随机数的配置:
# 测试随机数
# 随机字符串
pers.cc.properties.params.random=${random.value}
# 随机int
pers.cc.properties.params.random1=${random.int}
# 随机long
pers.cc.properties.params.random2=${random.long}
# 10以内的随机数
pers.cc.properties.params.random3=${random.int(10)}
# 10-20以内的随机数
pers.cc.properties.params.random4=${random.int[10,20]}
c.数组的配置
#测试数组
pers.cc.properties.param.strArr[0]=aaaa
pers.cc.properties.param.strArr[1]=bbbb
pers.cc.properties.param.intArr=1,2,3,4
3.配置参数的使用
参数一般分两种:
1.如果配置的是系统参数,系统会自动引用如server.port端口号;
2.业务参数,需要系统中引用;引用的方法很简单即在bean(即使用注解@RestController,@Component等注解标注后)中定义变量,使用@Value等注解进行赋值
a.当个赋值,即使用@Value注解一个个赋值,如下(去除set,get方法):
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("params")
public class Params {
@Value("${pers.cc.properties.params.name}")
private String name;
@Value("${pers.cc.properties.params.value}")
private String value;
@Value("${pers.cc.properties.params.desc}")
private String desc;
@Value("${pers.cc.properties.params.random}")
private String random;
@Value("${pers.cc.properties.params.random1}")
private int random1;
@Value("${pers.cc.properties.params.random2}")
private long random2;
@Value("${pers.cc.properties.params.random3}")
private int random3;
@Value("${pers.cc.properties.params.random4}")
private int random4;
@Override
public String toString() {
return "Params [name=" + name + ", value=" + value + ", desc=" + desc + ", random=" + random + ", random1="
+ random1 + ", random2=" + random2 + ", random3=" + random3 + ", random4=" + random4 + "]";
}
}
b.整体赋值,按照整个节点赋值到整个bean,此时也可指定配置文件,即将配置文件按照业务划分多个:如下(去除set,get):
import java.util.Arrays;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "pers.cc.properties.param")
@PropertySource(value = { "config/param.properties" })
@Component("param")
public class Param {
private String name;
private String value;
private String desc;
private String random;
private int random1;
private long random2;
private int random3;
private int random4;
private String[] strArr;
private int[] intArr;
@Override
public String toString() {
return "Param [name=" + name + ", value=" + value + ", desc=" + desc + ", random=" + random + ", random1="
+ random1 + ", random2=" + random2 + ", random3=" + random3 + ", random4=" + random4 + ", strArr="
+ Arrays.toString(strArr) + ", intArr=" + Arrays.toString(intArr) + "]";
}
}