Duration (java.time.Duration) 在yaml properties 中的配置方法
在RedisProperties的配置中,使用到了Duration
类,来表示时间属性,这里记录下
实际样例:
host: 218.94.128.34
port: 16379
database: 4
password: long123456@HhRedis
timeout: 15000ms # 这个就是使用了Duration类型
lettuce:
pool:
min-idle: 0
max-idle: 8
max-active: 8
max-wait: -1
通过源码找到springboot的转换器StringToDurationConverter,其中转换的核心代码使用了DurationStyle定义了时间格式:
// org.springframework.boot.convert.StringToDurationConverter
private Duration convert(String source, DurationStyle style, ChronoUnit unit) {
style = (style != null) ? style : DurationStyle.detect(source);
return style.parse(source, unit);
}
我们在DurationStyle中可以看到有两种格式( 简单格式 和 ISO-8601格式 )的支持:
// org.springframework.boot.convert.DurationStyle
/**
* Simple formatting, for example '1s'.
*/
SIMPLE("^([+-]?\\d+)([a-zA-Z]{0,2})$")
/**
* ISO-8601 formatting.
*/
ISO8601("^[+-]?[pP].*$")
DurationStyle中简单格式支持的单位定义在下方的Unit枚举中:
// org.springframework.boot.convert.DurationStyle.Unit
/**
* Nanoseconds.
*/
NANOS(ChronoUnit.NANOS, "ns", Duration::toNanos),
/**
* Microseconds.
*/
MICROS(ChronoUnit.MICROS, "us", (duration) -> duration.toNanos() / 1000L),
/**
* Milliseconds.
*/
MILLIS(ChronoUnit.MILLIS, "ms", Duration::toMillis),
/**
* Seconds.
*/
SECONDS(ChronoUnit.SECONDS, "s", Duration::getSeconds),
/**
* Minutes.
*/
MINUTES(ChronoUnit.MINUTES, "m", Duration::toMinutes),
/**
* Hours.
*/
HOURS(ChronoUnit.HOURS, "h", Duration::toHours),
/**
* Days.
*/
DAYS(ChronoUnit.DAYS, "d", Duration::toDays);
DataSize(org.springframework.util.unit.DataSize)在yaml properties 中的配置方法
在org.springframework.boot.autoconfigure.web.servlet.MultipartProperties中,配置上传的文件大小,就使用了DataSize类型
实际配置样例:
spring:
servlet:
multipart:
max-file-size: 16MB # 单个文件大小
max-request-size: 32MB # 设置总上传的文件大小
通过源码找到springboot的转换器StringToDataSizeConverter,其中转换的核心代码使用了DataUnit定义了数据单位格式:
org.springframework.boot.convert.StringToDataSizeConverter
private DataUnit getDataUnit(TypeDescriptor targetType) {
DataSizeUnit annotation = targetType.getAnnotation(DataSizeUnit.class);
return (annotation != null) ? annotation.value() : null;
}
private DataSize convert(String source, DataUnit unit) {
return DataSize.parse(source, unit);
}
我们在DataUnit中,可以看到支持以下单位:
// org.springframework.util.unit.DataUnit
/**
* Bytes, represented by suffix {@code B}.
*/
BYTES("B", DataSize.ofBytes(1)),
/**
* Kilobytes, represented by suffix {@code KB}.
*/
KILOBYTES("KB", DataSize.ofKilobytes(1)),
/**
* Megabytes, represented by suffix {@code MB}.
*/
MEGABYTES("MB", DataSize.ofMegabytes(1)),
/**
* Gigabytes, represented by suffix {@code GB}.
*/
GIGABYTES("GB", DataSize.ofGigabytes(1)),
/**
* Terabytes, represented by suffix {@code TB}.
*/
TERABYTES("TB", DataSize.ofTerabytes(1));