随机数生成

    1. public class RandomValuePropertySourceEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
    2. public static final int ORDER = Ordered.HIGHEST_PRECEDENCE + 1;
    3. private final Log logger;
    4. public RandomValuePropertySourceEnvironmentPostProcessor(Log logger) {
    5. this.logger = logger;
    6. }
    7. @Override
    8. public int getOrder() {
    9. return ORDER;
    10. }
    11. @Override
    12. public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
    13. RandomValuePropertySource.addToEnvironment(environment, this.logger);
    14. }
    15. }

    RandomValuePropertySource就是生成随机数的工具source

    public class RandomValuePropertySource extends PropertySource<Random> {
        public static final String RANDOM_PROPERTY_SOURCE_NAME = "random";
        private static final String PREFIX = "random.";
    
        public RandomValuePropertySource() {
            this(RANDOM_PROPERTY_SOURCE_NAME);
        }
        public RandomValuePropertySource(String name) {
            super(name, new Random());
        }
        @Override
        public Object getProperty(String name) {
            if (!name.startsWith(PREFIX)) {
                return null;
            }
            return getRandomValue(name.substring(PREFIX.length()));
        }
    
        private Object getRandomValue(String type) {
            if (type.equals("int")) {
                // random.int
                return getSource().nextInt();
            }
            if (type.equals("long")) {
                return getSource().nextLong();
            }
            String range = getRange(type, "int");
            if (range != null) {
                // random.int(0,10) 生成[0,10)之间的整数
                return getNextIntInRange(Range.of(range, Integer::parseInt));
            }
            range = getRange(type, "long");
            if (range != null) {
                return getNextLongInRange(Range.of(range, Long::parseLong));
            }
            if (type.equals("uuid")) {
                return UUID.randomUUID().toString();
            }
            return getRandomBytes();
        }
    }
    

    该PropertySource主要处理SpringCloud配置中随机数的生成,如application.properties配置文件中使用如下配置

    #随机端口
    server.port=random.int
    #范围随机数
    user.age=random.int(0,100)
    #long型
    app.id=random.long