我需要定义持续时间值(spring.redis.timeout)application.properties.
我试图使用Spring boot文档中定义的一点:
Spring Boot专门支持表示持续时间。如果您公开了一个java。时间属性,应用程序属性中提供以下格式:
java使用的标准ISO-8601格式。util。持续时间一种可读性更强的格式,其中值和单位是耦合的(例如,10s表示10秒)
当我使用Spring时。redis。timeout=3sSpring启动应用程序引发此异常:
无法将类型'java.lang.String'的值转换为所需类型'java.time.Duration':未找到匹配的编辑器或转换策略
哪种方法是在应用程序中为Duration属性设置正确值的最佳方法。去年Springboot 2发行版的属性?
当前的Duration(Spring-Boot 2.0.4. RELEASE)不能与@Value表示法一起使用,但可以与@ConfigurationProperties一起使用
对于Redis,您有RedisProperties,可以使用配置:
spring.redis.timeout=5s
以及:
@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());
}
}
它打印(解析为5s):
PT5S
https://docs.oracle.com/javase/8/docs/api//java/time/Duration.html#parse-java。lang.CharSequence-
可以在Spring表达式语言中使用@值表示法
@Value("#{T(java.time.Duration).parse('${spring.redis.timeout}')}")
private Duration timeout;
任何类型为duration的属性都可以通过注入。属性
或。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
您还可以使用ve和-ve符号来表示积极与消极的时间段。
PT-3H30M
=-3小时30分钟,基本上是-2.5小时 -PT3H30M=-3小时-30分钟,基本上是-3.5小时
双负在这里也起作用:-PT-3H 30M=3小时-30分钟,基本上是2.5小时
注:
持续时间只能在HOURS
或更低的ChronoUnit(NANOS
、MICROS
、MILLIS
、秒
、分钟
、HOURS
)中表示,因为它们表示准确的持续时间
- 不允许使用更高的ChronoUnit(
DAYS
、WEEKS
、MONTHS
、YEARS
、DECADES
、CENTURIES
、MILLENNIA
、ERAS
、FOREVER
),因为它们不代表准确的持续时间。这些ChronoUnit具有估计的持续时间,因为天数可能因夏令时而变化,月有不同的长度等。 - 异常-Java自动将
DAYS
转换为HOURS
,但它不会为任何其他更高的ChronoUnit(MONTHS
、YEARS
等)执行此操作。
如果我们尝试做一个“P1D”,java会自动将其转换为“PT24H”。因此,如果我们想要持续1个月,我们必须使用PT720H或P30D。在P30D的情况下,java的自动转换将发生,并给我们提供PT720H
赞成,如果它对你有用或者你喜欢这个解释。谢谢,
我正在尝试获取jQuery addClass 演示问题:在构建演示时遇到了一个奇怪的问题——jQuery函数在我的实际网站上不起作用。不确定这是为什么,但声明它找不到变量“hoverAwayFromWindows”或“hoverOverWindows”——但这没有意义,因为它们是函数,而不是变量。 转换持续时间问题:只要父div悬停在上面,子div就会立即应用“悬停在windows样式上”类,但我
目前,当您获得youtube持续时间时,您会获得类似的内容。 下面的代码将其更改为。然而,我希望只获得SECONDS,因此将是输出。
我需要一些解释为什么这个代码不编译: 错误: 类型Duration中的(TemporalAmount)方法不适用于参数(ChronoUnit) 正如本文所述: public static Duration from(TemporalAmount amount)从时间量中获取持续时间的实例。这将根据指定的金额获得持续时间。TemporalAmount表示一个时间量,可以是基于日期的,也可以是基于时间
我怎么能看到它?在portal中,我发现了一个选项,可以看到会话计数,但不是持续时间。
我正在寻找一种从“ISO 8601持续时间格式”(P0DT0H0M0S)转换为小时的便捷方法。 到目前为止,我想到了这个: 如您所见,我的方法是将数字拆分并乘以24、1、1/60、1/3600以得到小时。我可以减少代码量吗? 样本数据和所需结果 输入: 'P1DT2H3M44S' (1 天 2 小时 3 分 44 秒) 期望输出: 26.062222222222222 (这是小时)
我有ISO8601格式的持续时间值,我将其转换为时间值为整数秒,如下所示: ISO8601格式的持续时间值=“P1Y”。 我将该值存储在“时间-单位-秒”中。因此,当我检索的值将是在int,我想转换回ISO8601持续时间格式,所以我应该得到“P1Y”转换后回来。 有没有快速的方法可以做到这一点?或者我必须把时间的int值转换成float,然后通过某种方法把它转换成ISO8601持续时间。