Spring Boot 教程

配置随机值

在开发 Spring Boot 项目时,我们可能会有每次启动应用时需要指定一个随机端口,而不是一个固定的端口。或者,项目每次启动生成一个随机的KEY,客户端需要通过这个 KEY 来验证身份。

要实现上面两个需求其实还是很简单的,我们可以自定义 WebServerFactoryCustomizer 实现端口随机生成。代码如下:

import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;

public class MyWebServerFactoryCustomizer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
    @Override
    public void customize(ConfigurableServletWebServerFactory factory) {
        // 随机生成 8000 ~ 9000 之间的端口
        factory.setPort( (int)(Math.random()*1000) + 8000 );
    }
}

关于怎样使用 WebServerFactoryCustomizer 来自定义端口,请参考 配置服务端口。至于生成随机 KEY 那就更简单了,在应用启动时使用 UUID 生成一个 KEY 即可。

Spring Boot 配置随机值

在 Spring Boot 中,配置文件支持配置随机数和随机KEY。在注入随机值(例如:密钥或测试用例)时 RandomValuePropertySource 很有用,它能产生整数,longs或字符串。比如:

(1)生成一个随机 KEY,例如:

my.secret=${random.value}

生成结果:f87be1cbcf2312cf1b20a8b6c72ad1c7

(2)生成一个随机 int 值,例如:

my.number=${random.int}

(3)生成一个随机 long 值,例如:

my.bignumber=${random.long}

(4)生成小于 10 的 int 随机值,例如:

my.number.less.than.ten=${random.int(10)}

(5)生成位于 1024 和 65536 之间的随机值,例如:

my.number.in.range=${random.int[1024,65536]}

random.int 的语法是 OPEN value (,max) CLOSE ,此处 OPEN,CLOSE 可以是任何字符,并且 value,max 是整数。如果提供 max ,那么 value 是最小 值, max 是最大值(不包含在内)。

注意:在上面定义的随机值可以在 Bean 中通过 @Value 注解引用,例如:

// my.secret=${random.value}
@Value("${my.secret}")
private String mySecret;

// my.number=${random.int}
@Value("${my.number}")
private int myNumber;

// my.bignumber=${random.long}
@Value("${my.bignumber}")
private long myBigNumber;

// my.number.less.than.ten=${random.int(10)}
@Value("${my.number.less.than.ten}")
private int myNumberLessThanTen;

// my.number.in.range=${random.int[1024,65536]}
@Value("${my.number.in.range}")
private int myNumberInRange;
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号