其他配置
Spring Boot支持很多非常实用的参数配置功能。本节介绍Spring Boot配置生成随机数、配置引用等实际项目中的实用配置。
1.随机数
在项目开发过程中,可能需要配置生成随机数,比如说随机配置的服务器端口、随机生成登录密钥等等。Spring Boot支持在系统加载时配置随机数,使用${random}可以生成各种不同类型的随机值,从而简化代码生成的麻烦,例如生成int值、long值、string字符串。
Spring Boot提供的RandomValuePropertySource配置类可以很方便地生成随机数,可以生成integer、long、uuids和string类型的数据。下面通过示例来演示如何配置生成随机数。
首先,在application.properties中添加随机数的配置项。
# 随机字符串
cfg.random.value=${
random.value}
# uuid
cfg.random.uuid=${
random.uuid}
# 随机int
cfg.random.number=${
random.int}
# 随机Long
cfg.random.bignumber=${
random.long}
# 10以内的随机数
cfg.random.test1=${
random.int(10)}
# 10-20的随机数
cfg.random.test2=${
random.int[10,20]}
上面的示例中,在application.properties配置文件中增加配置项以使用${radom.xxx}的形式实现生成随机数。
然后,创建配置映射类ConfigRandomValue获取随机数配置项,读取配置项的方式和读取普通配置项的方式一样:通过@Value或者@ConfigurationProperties注解来读取。示例代码如下:
@Component
public class ConfigRandomValue {
@Value("${cfg.random.value}")
private String secret;
@Value("${cfg.random.number}")
private int number;
@Value("${cfg.random.bignumber}")
private long bigNumber;
@Value("${cfg.random.uuid}")
private String uuid;
@Value("${cfg.random.test1}")
private int number2;
@Value("$[cfg.random.test2}")
private int number3;
//省略get、set
}
在上面的示例中,我们创建了ConfigRandomValue配置生成类,通过@Value注解读取了配置文件中的配置。最后,验证随机数配置是否生效。创建单元测试,验证随机数是否生成成功。示例代码如下:
@Autowired
private ConfigRandomValue randomValue;
@Test
void getRandom() {
System.out.printIn(randomValue.getSecret());
System.out.printIn(randomValue.getUuid());
System.out.printIn(randomValue.getBigNumber());
System.out.printIn(randomValue.getNumber());
System.out.printIn(randomValue.getNumber2());
System.out.printIn(randomValue.getNumber3());
}
在上面的示例中,首先注入了自定义的随机数生成配置类,然后调用了相关的配置项来验证随机数规则是否生效。
2.配置引用
Spring Boot支持使用占位符获取之前的属性配置,也就是在后一个配置的值中直接引用先前定义过的配置项,直接解析其中的值。这样做的好处是:在多个具有相互关联的配置项中,只需要对其中一处配置项预先设置,其他地方都可以引用,省去了后续多处修改的麻烦。
使用格式为:${name},name表示先前在配置文件中已经设置过的配置项名。下面通过示例演示如何在配置文件中实现参数引用。
我们修改application.properties配置文件,示例代码如下:
my.name=ZhangSan
my.sex=1
my.des=My name is $(my.name}.
在上述示例中,首先设置了my.name=ZhangSan;接着在my.des配置项中使用${my.name}来引用my.name配置项的值。my.des获取到的是:My name is ZhangSan。
${my.name}还可以使用“:”指定默认值,避免没有配置参数导致程序异常,示例代码如下:
my.des=My name is ${
my.name:weiz}
在上面的示例中,我们通过冒号“:”设置配置项的默认值为:weiz,如果配置项为空或者未找到该配置项,系统也不会出错,my.des获取到的是:My name is weiz。
随机数和配置引用非常简单,在项目开发过程中非常实用。