查看原文
其他

Spring Boot 配置随机数那些小技巧

R哥 Java技术栈 2018-08-11


Spring Boot支持在系统加载的时候配置随机数。

添加config/random.properties文件,添加以下内容:

  1. #随机32位MD5字符串

  2. user.random.secret=${random.value}

  3. #随机int数字

  4. user.random.intNumber=${random.int}

  5. #随机long数字

  6. user.random.longNumber=${random.long}

  7. #随便uuid

  8. user.random.uuid=${random.uuid}

  9. #随机10以内的数字

  10. user.random.lessTen=${random.int(10)}

  11. #随机1024~65536之内的数字

  12. user.random.range=${random.int[1024,65536]}

添加绑定类:

  1. import org.springframework.boot.context.properties.ConfigurationProperties;

  2. import org.springframework.context.annotation.PropertySource;

  3. import org.springframework.stereotype.Component;

  4. /**

  5. * 微信公众号:Java技术栈

  6. */

  7. @Component

  8. @ConfigurationProperties(prefix = "user.random")

  9. @PropertySource(value = { "config/random.properties" })

  10. public class RandomConfig {

  11.    private String secret;

  12.    private int intNumber;

  13.    private int lessTen;

  14.    private int range;

  15.    private long longNumber;

  16.    private String uuid;

  17.    public String getSecret() {

  18.        return secret;

  19.    }

  20.    public void setSecret(String secret) {

  21.        this.secret = secret;

  22.    }

  23.    public int getIntNumber() {

  24.        return intNumber;

  25.    }

  26.    public void setIntNumber(int intNumber) {

  27.        this.intNumber = intNumber;

  28.    }

  29.    public int getLessTen() {

  30.        return lessTen;

  31.    }

  32.    public void setLessTen(int lessTen) {

  33.        this.lessTen = lessTen;

  34.    }

  35.    public int getRange() {

  36.        return range;

  37.    }

  38.    public void setRange(int range) {

  39.        this.range = range;

  40.    }

  41.    public long getLongNumber() {

  42.        return longNumber;

  43.    }

  44.    public void setLongNumber(long longNumber) {

  45.        this.longNumber = longNumber;

  46.    }

  47.    public String getUuid() {

  48.        return uuid;

  49.    }

  50.    public void setUuid(String uuid) {

  51.        this.uuid = uuid;

  52.    }

  53. }

输出如下:

  1. secret=83a5c3402ef936a37842dc6de3d1af0f

  2. intNumber=1816149855

  3. lessTen=1

  4. range=37625

  5. longNumber=8449008776720010146

  6. uuid=e5bc2091-1599-45b1-abd7-e3721ac77e6b

具体的生成细节可以参考Spring Boot的配置类:

org.springframework.boot.context.config.RandomValuePropertySource

来看下它的源码,实现其实很简单。

  1. public RandomValuePropertySource(String name) {

  2.    super(name, new Random());

  3. }

  4. private Object getRandomValue(String type) {

  5.    if (type.equals("int")) {

  6.        return getSource().nextInt();

  7.    }

  8.    if (type.equals("long")) {

  9.        return getSource().nextLong();

  10.    }

  11.    String range = getRange(type, "int");

  12.    if (range != null) {

  13.        return getNextIntInRange(range);

  14.    }

  15.    range = getRange(type, "long");

  16.    if (range != null) {

  17.        return getNextLongInRange(range);

  18.    }

  19.    if (type.equals("uuid")) {

  20.        return UUID.randomUUID().toString();

  21.    }

  22.    return getRandomBytes();

  23. }

其实就是使用了 Java 自带的 java.util.Randomjava.util.UUID 等工具类,实现很简单,这里就不再详细解析了,大家可以自己去看下这个类的实现。

随机数的生成配置就是这么点了,我知道的是可以随机生成应用程序端口,其他的还真没用到。

@程序猿 你们还知道其他的随机数应用么?



继续深入交流,欢迎加入知识星球

1,000+ 程序员的技术圈子

往期干货推荐

1. Java 10 实战第 1 篇:局部变量类型推断

2. Java 11 要来了,编译运行一个命令搞定

3. 图解 https 单向认证和双向认证

4. Intellij IDEA 那些隐藏好用的小技巧

5. MySQL数据库开发的 36 条军规


Java技术栈 • 长按关注

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存