我有一個存儲簡單POJO的地圖,關鍵是POJO的id字段。 從Spring的@CachePut註解,我希望這樣的事情:Spring Boot @CachePut值爲空
JobModel jm = new JobModel();
cachemap.put(jm.getId(), jm);
儘管如此,它插入空值每一次高速緩存。如果我在配置緩存時不允許空值,我會得到一個例外,表示正在插入null。
代碼:
@SpringBootApplication
@EnableScheduling
@EnableAutoConfiguration
@EnableCaching
public class Application {
public static void main(String[] args) {
applicationContext = SpringApplication.run(Application.class, args);
}
...
private GuavaCache jobCache() {
return new GuavaCache(CacheNames.CACHE_JOB, CacheBuilder.newBuilder()
.maximumSize(999999)
.build(),
false);// or true, still null values
}
@Bean(name = "cacheManager")
public CacheManager cacheManager() {
SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
simpleCacheManager.setCaches(Arrays.asList(
jobCache(),....
));
return simpleCacheManager;
}
而DAO類,實現一個接口,在註解中DAO的(實現接口,而不是在類中聲明接口本身)
@CachePut(value = CacheNames.CACHE_JOB,key = "jm.id")
@Transactional
@Override
public void insert(JobModel jm) {...}
我試過jm.id
,jm.getid()
,#a0.getId()
。不過,每次我從com.google.common.base.Preconditions.checkNotNull()
(或者只是一個簡單的空插入)中獲得和例外。我在那裏放置了一個斷點,我可以看到該鍵是我期望的(guid,string),但是該值爲空。
RestController調用dao對象,我不認爲我應該將一個CachePut移動到那裏(同樣,它也不會返回任何東西) – appl3r