1、随机数
${random.int}
${random.int(max)}
${random.int(min,max)}
${random.long}
${random.long(max)}
${random.long(min,max)}
${random.uuid}
随机数使用的是RandomValuePropertySource类进行解析。注意:在使用IDEA进行随机数配置的时候,不会提示long的第二种和第三种随机数使用方式,博主也是在看RandomValuePropertySource才发现的。
public class RandomValuePropertySource extends PropertySource<Random> { /** * Name of the random {@link PropertySource}. */ public static final String RANDOM_PROPERTY_SOURCE_NAME = "random"; private static final String PREFIX = "random."; private static final Log logger = LogFactory.getLog(RandomValuePropertySource.class); public RandomValuePropertySource(String name) { super(name, new Random()); } public RandomValuePropertySource() { this(RANDOM_PROPERTY_SOURCE_NAME); } @Override public Object getProperty(String name) { if (!name.startsWith(PREFIX)) { return null; } if (logger.isTraceEnabled()) { logger.trace("Generating random property for '" + name + "'"); } return getRandomValue(name.substring(PREFIX.length())); } private Object getRandomValue(String type) { if (type.equals("int")) {//${random.int} //getSource()返回的是泛型T的实际对象,所以nextInt()也就是调用Random类的nextInt()方法 return getSource().nextInt(); } if (type.equals("long")) {//${random.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")) {//${random.uuid} return UUID.randomUUID().toString(); } return getRandomBytes();//${random.value} } private String getRange(String type, String prefix) { if (type.startsWith(prefix)) { int startIndex = prefix.length() + 1; if (type.length() > startIndex) { return type.substring(startIndex, type.length() - 1); } } return null; } private int getNextIntInRange(String range) { String[] tokens = StringUtils.commaDelimitedListToStringArray(range); int start = Integer.parseInt(tokens[0]); if (tokens.length == 1) {//${random.int(value)} return getSource().nextInt(start); } //${random.int(value,max)} return start + getSource().nextInt(Integer.parseInt(tokens[1]) - start); } private long getNextLongInRange(String range) { String[] tokens = StringUtils.commaDelimitedListToStringArray(range); if (tokens.length == 1) {//${random.long(value)} return Math.abs(getSource().nextLong() % Long.parseLong(tokens[0])); } long lowerBound = Long.parseLong(tokens[0]); long upperBound = Long.parseLong(tokens[1]) - lowerBound; //${random.long(value,max)} return lowerBound + Math.abs(getSource().nextLong() % upperBound); } private Object getRandomBytes() { byte[] bytes = new byte[32]; getSource().nextBytes(bytes); //${random.value} return DigestUtils.md5DigestAsHex(bytes); } //... }
2、占位符
${aaa: default},如果 ${aaa}不存在,则使用default代替aaa的值;如果${aaa}存在,则使用${aaa}的值。
a = ${random.int} b = ${random.int(100)} c = ${random.int(500,1000)} d = ${random.long} e = ${random.long(10000)} f = ${random.long(20000,99999)} g = ${random.value} h = ${random.uuid} i = ${aaa:"bbb"}
i = ${aaa:"bbb"}
,在引用i变量的时候,会先解析i的值,然后在解析${aaa:"bbb"}的值,接着又解析${aaa}的值,如果存在,则直接使用aaa变量的值,如果不存在,则直接使用"bbb"作为a变量的值,实际上是一种递归解析。
====================打个广告,欢迎关注====================
QQ: |
412425870 |
微信公众号:Cay课堂 |
|
csdn博客: |
http://blog.csdn.net/caychen |
码云: |
https://gitee.com/caychen/ |
github: |
https://github.com/caychen |
点击群号或者扫描二维码即可加入QQ群: |
|
|