CRI*_*ANZ 4 duration java-8 spring-boot
我需要通过application.properties 定义Duration值(spring.redis.timeout)。
我试图使用Spring引导文档中定义的一点:
Spring Boot为表示持续时间提供了专门的支持。如果公开java.time.Duration属性,则应用程序属性中的以下格式可用:
常规的长表示形式(除非@DurationUnit指定了a,否则使用毫秒作为默认单位)标准ISO-8601格式由java.util.Duration
值和单位耦合的可读性更高的格式(例如10s表示10秒)
当我使用spring.redis.timeout = 3s时,Spring Boot应用程序会抛出此异常:
无法将类型“ java.lang.String”的值转换为所需类型“ java.time.Duration”:找不到匹配的编辑器或转换策略
在最新的Spring Boot 2版本中,为application.properties中的Duration属性设置正确值的最佳方法是哪一种?
Vol*_*ozo 25
Spring Boot 2.5.5 更新
我们可以将@Value注释与值一起使用application.properties。例如,您的application.properties文件中有下一个属性:
your.amazing.duration=100ms
Run Code Online (Sandbox Code Playgroud)
然后你可以在@Value注释中使用它:
your.amazing.duration=100ms
Run Code Online (Sandbox Code Playgroud)
就这些。
支持单位:
文档:链接
小智 18
任何类型为 duration 的属性都可以通过.properties或.yml文件注入。您需要做的就是使用正确的格式。
如果要注入5秒的持续时间应该被定义为PT5S或pt5s或PT5s
其他例子
PT1.5S = 1.5 Seconds
PT60S = 60 Seconds
PT3M = 3 Minutes
PT2H = 2 Hours
P3DT5H40M30S = 3Days, 5Hours, 40 Minutes and 30 Seconds
Run Code Online (Sandbox Code Playgroud)
您还可以使用 +ve 和 -ve 符号来表示正负时间段。
PT-3H30M= -3 小时,+30 分钟,基本上是 -2.5Hours-PT3H30M= -3 小时,-30 分钟,基本上是 -3.5Hours-PT-3H+30M= +3 小时,-30 分钟,基本上是 +2.5 小时
Upvote,如果它适合你或者你喜欢这个解释。谢谢,
当前的 Duration (Spring-Boot 2.0.4.RELEASE) 不能与 @Value 表示法一起使用,但可以与 @ConfigurationProperties 一起使用
对于 Redis,您有 RedisProperties 并且可以使用以下配置:
spring.redis.timeout=5s
Run Code Online (Sandbox Code Playgroud)
和:
@SpringBootApplication
public class DemoApplication {
@Autowired
RedisProperties redisProperties;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@PostConstruct
void init() {
System.out.println(redisProperties.getTimeout());
}
}
Run Code Online (Sandbox Code Playgroud)
它打印(解析为 5s):
PT5S
Run Code Online (Sandbox Code Playgroud)
https://docs.oracle.com/javase/8/docs/api//java/time/Duration.html#parse-java.lang.CharSequence-
小智 5
可以在Spring Expression Language中使用@Value表示法
@Value("#{T(java.time.Duration).parse('${spring.redis.timeout}')}")
private Duration timeout;
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您的 Spring-Boot 版本或其依赖项未将 ApplicationConversionService 放入上下文中(Spring-Boot 直到 2.1 才这样做),您可以显式公开它
@Bean
public ConversionService conversionService() {
return ApplicationConversionService.getSharedInstance();
}
Run Code Online (Sandbox Code Playgroud)
它调用Duration.parse,因此您可以在属性文件中使用PT3S、等。PT1H30M
| 归档时间: |
|
| 查看次数: |
9118 次 |
| 最近记录: |