首页 > 解决方案 > Java使用@value构造成员字段大小

问题描述

我正在使用番石榴缓存,我想保持最大大小可配置。我尝试为此使用@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;
            }
        });

标签: javaspringguava

解决方案


您可以将缓存创建放在带有注释的方法中@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并注入了属性,则将执行此方法


推荐阅读