zoukankan      html  css  js  c++  java
  • Spring Boot 配置随机数技巧

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

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

    #随机32位MD5字符串
    user.random.secret=${random.value}
    
    #随机int数字
    user.random.intNumber=${random.int}
    
    #随机long数字
    user.random.longNumber=${random.long}
    
    #随便uuid
    user.random.uuid=${random.uuid}
    
    #随机10以内的数字
    user.random.lessTen=${random.int(10)}
    
    #随机1024~65536之内的数字
    user.random.range=${random.int[1024,65536]}
    

    添加绑定类:

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties(prefix = "user.random")
    @PropertySource(value = { "config/random.properties" })
    public class RandomConfig {
    
    	private String secret;
    	private int intNumber;
    	private int lessTen;
    	private int range;
    	private long longNumber;
    	private String uuid;
    
    	public String getSecret() {
    		return secret;
    	}
    
    	public void setSecret(String secret) {
    		this.secret = secret;
    	}
    
    	public int getIntNumber() {
    		return intNumber;
    	}
    
    	public void setIntNumber(int intNumber) {
    		this.intNumber = intNumber;
    	}
    
    	public int getLessTen() {
    		return lessTen;
    	}
    
    	public void setLessTen(int lessTen) {
    		this.lessTen = lessTen;
    	}
    
    	public int getRange() {
    		return range;
    	}
    
    	public void setRange(int range) {
    		this.range = range;
    	}
    
    	public long getLongNumber() {
    		return longNumber;
    	}
    
    	public void setLongNumber(long longNumber) {
    		this.longNumber = longNumber;
    	}
    
    	public String getUuid() {
    		return uuid;
    	}
    
    	public void setUuid(String uuid) {
    		this.uuid = uuid;
    	}
    	
    }
    

    输出如下:

    secret=83a5c3402ef936a37842dc6de3d1af0f
    intNumber=1816149855
    lessTen=1
    range=37625
    longNumber=8449008776720010146
    uuid=e5bc2091-1599-45b1-abd7-e3721ac77e6b
    

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

    org.springframework.boot.context.config.RandomValuePropertySource

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

    public RandomValuePropertySource(String name) {
    	super(name, new Random());
    }
    
    private Object getRandomValue(String type) {
    	if (type.equals("int")) {
    		return getSource().nextInt();
    	}
    	if (type.equals("long")) {
    		return getSource().nextLong();
    	}
    	String range = getRange(type, "int");
    	if (range != null) {
    		return getNextIntInRange(range);
    	}
    	range = getRange(type, "long");
    	if (range != null) {
    		return getNextLongInRange(range);
    	}
    	if (type.equals("uuid")) {
    		return UUID.randomUUID().toString();
    	}
    	return getRandomBytes();
    }
    

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

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

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

    推荐:Spring Boot & Cloud 最强技术教程

  • 相关阅读:
    读书笔记之理想设计的特征
    一些javascript 变量声明的 疑惑
    LINQ 使用方法
    Google MySQL tool releases
    读书笔记之设计的层次
    EF之数据库连接问题The specified named connection is either not found in the configuration, not intended to be used with the Ent
    转载 什么是闭包
    javascript面向对象起步
    Tips
    数据结构在游戏中的应用
  • 原文地址:https://www.cnblogs.com/javastack/p/9075673.html
Copyright © 2011-2022 走看看