
저는 Java(1.8.0_222)와 함께 ehcache(3.8.0)를 사용하여 SQL 데이터베이스에서 검색된 힙에 값을 저장하고 있습니다. 내가 겪고 있는 문제는 저장된 값이 개체 목록이고 해당 개체에도 목록이 포함되어 있으며 시간이 지남에 따라 가장 안쪽 목록의 참조가 null이 되는 것 같다는 것입니다. 나는 성공하지 못한 채 더 작은 프로그램에서 그것을 다시 만들어 보았으므로 ehcache의 문제라기보다는 내가 간과했던 뭔가 멍청한 것이라고 추측합니다.
캐시 설정에 사용하는 코드는 다음과 같습니다.
final long cacheSize = 1L;
final MemoryUnit cacheUnits = MemoryUnit.GB;
ResourcePoolsBuilder resourcePools = ResourcePoolsBuilder
.newResourcePoolsBuilder()
.heap(cacheSize, cacheUnits);
CacheConfigurationBuilder<Key, List<MyInterface>> cacheConfigurationBuilder = CacheConfigurationBuilder
.newCacheConfigurationBuilder(Key.class, (Class<List<MyInterface>>)(Class<?>)List.class, resourcePools)
.withSizeOfMaxObjectGraph(Long.MAX_VALUE);
cacheManager = CacheManagerBuilder
.newCacheManagerBuilder()
.withCache(cachesName, cacheConfigurationBuilder)
.build();
cacheManager.init();
cache = cacheManager.createCache(cacheName, cacheConfigurationBuilder);
답변1
문제를 해결했습니다. 저장된 객체가 힙을 사용하면 변경할 수 없는 것으로 나타났습니다. 그래서 무슨 일이 일어났는가 하면 프로그램이 캐시에서 개체를 가져오고 작업이 완료되면 일부 필드를 지운 다음 나중에 개체를 가져왔을 때 해당 필드는 여전히 지워진 상태였습니다.