我有 Spring 应用程序并尝试使用 Redis 缓存数据。对于此缓存,我尝试将 TTL 设置为 10 分钟,由于某种原因,我无法使用长类型,只能使用“PT10M”等格式。
我的 application.yml 如下所示:
cache:
service-available-event:
ttl: PT10M
配置类:
import org.springframework.cache.CacheManager;
@Configuration
@EnableCaching
public class RedisConfiguration {
@Bean
@ConfigurationProperties("cache.service-available-event")
public CustomCacheConfig serviceAvailableEventCacheConfig() {
return new CustomCacheConfig();
}
public class CustomCacheConfig extends CacheConfig {
public void setTTL(Duration ttl) {
super.setTTL(ttl.toMillis());
}
}
}
错误:
Description:
Failed to bind properties under 'cache.service-available-event.t-t-l' to long:
Property: cache.service-available-event.t-t-l
Value: "PT10M"
Origin: class path resource [application.yml] - 62:14
Reason: failed to convert java.lang.String to long (caused by java.lang.NumberFormatException: For input string: "PT10M")
Action:
Update your application's configuration
有没有办法将 application.yml 的格式从长格式更改为字符串?
不可以,您无法更改
application.yml
中的类型。
您可以更改您提供的值,以便可以将其解释/解析为
long
,或者您可以更改代码以在读取您定义的属性时接受 String
。
Spring 可以使用
application.yml
文件中的值自动分配字段,如下所示:
@Value("${your.property.key.}")
private String propertyName;
这样就可以从
application.yml
中设置你想要解释的类型。