Java使用@value构造成员字段大小
Java using @value to construct a member field size
我正在使用番石榴缓存,我想在其中保持最大大小可配置。我尝试为此使用@value,但问题是私有成员缓存在@value 注入之前创建。如何从配置属性中读取此大小?我目前使用的代码如下
@Component
public class DataProcessor {
@Value("${cacheSize}")
private long cacheSize;
@Value(value = "${rawSensorDataTopic}")
private String rawSensorDataTopic;
private LoadingCache<String, DataPacketGroup> rfPacketsCache = CacheBuilder.newBuilder().maximumSize(cacheSize)
.concurrencyLevel(1).expireAfterWrite(15, TimeUnit.MINUTES)
.build(new CacheLoader<String, DataPacketGroup>() {
@Override
public DataPacketGroup load(String key) throws Exception {
return null;
}
});
您可以将缓存创建放在一个用 @PostConstruct
注释的方法中
@Component
public class DataProcessor {
@Value("${cacheSize}")
private long cacheSize;
@Value(value = "${rawSensorDataTopic}")
private String rawSensorDataTopic;
private LoadingCache<String, DataPacketGroup> rfPacketsCache;
@PostConstruct
private void createcache() {
CacheBuilder.newBuilder().maximumSize(1000)
.concurrencyLevel(1).expireAfterWrite(15, TimeUnit.MINUTES)
.build(new CacheLoader<String, DataPacketGroup>() {
@Override
public DataPacketGroup load(String key) throws Exception {
return null;
}
});
}
如果构造了bean并注入了属性,就会执行这个方法
我正在使用番石榴缓存,我想在其中保持最大大小可配置。我尝试为此使用@value,但问题是私有成员缓存在@value 注入之前创建。如何从配置属性中读取此大小?我目前使用的代码如下
@Component
public class DataProcessor {
@Value("${cacheSize}")
private long cacheSize;
@Value(value = "${rawSensorDataTopic}")
private String rawSensorDataTopic;
private LoadingCache<String, DataPacketGroup> rfPacketsCache = CacheBuilder.newBuilder().maximumSize(cacheSize)
.concurrencyLevel(1).expireAfterWrite(15, TimeUnit.MINUTES)
.build(new CacheLoader<String, DataPacketGroup>() {
@Override
public DataPacketGroup load(String key) throws Exception {
return null;
}
});
您可以将缓存创建放在一个用 @PostConstruct
@Component
public class DataProcessor {
@Value("${cacheSize}")
private long cacheSize;
@Value(value = "${rawSensorDataTopic}")
private String rawSensorDataTopic;
private LoadingCache<String, DataPacketGroup> rfPacketsCache;
@PostConstruct
private void createcache() {
CacheBuilder.newBuilder().maximumSize(1000)
.concurrencyLevel(1).expireAfterWrite(15, TimeUnit.MINUTES)
.build(new CacheLoader<String, DataPacketGroup>() {
@Override
public DataPacketGroup load(String key) throws Exception {
return null;
}
});
}
如果构造了bean并注入了属性,就会执行这个方法