- 스프링 부트 버전 : 1.4.1.RELEASE
- 으로 Ehcache 버전 : 3.1.3
- OS : MAC 10.11.6
- 자바 : 1.8.0_91
나는 다음을 따라/"Caching 101" with Louis Jacomet & Aurelien Broszniowski는 캐시를 통해 사용으로 Ehcache 3.으로 Ehcache 3 캐시 연결 스프링 부팅 및 JPA
(이 프레젠테이션을 통해 유약 몇 가지가 있지만 언급에 젖은 내 발을 얻을 승 간단히). 그 중 하나는 캐시 키 관리입니다. 이제 응용 프로그램의 책임이됩니다. 생성 된 객체/데이터는 캐시 된 첫 번째 b/f이기 때문에 캐시 된 전체 지점에서 우리는 db 생성 된 'id'를 반환하지 않습니다 (JPA) ... 우리는 Entity에이 필드를 추가하여이 캐시 키를 저장합니다.
그래서 Long, Cache 키 세트를 유지 관리하는 '키 생성기'를 만들었습니다. 벌금. 그러나 응용 프로그램이 중지되면이 집합은 사라집니다. 따라서 응용 프로그램이 실행되는 동안 생성 된 개체/항목이 db에 지속되면 시작시 이러한 기록을 응용 프로그램 캐시에 삽입해야하고 캐시 키 (Set)도 채워야합니다.
In my sample code 내 휴식 컨트롤러는 캐시에서 상호 작용하는 사람이고이를 수행하는 방법을 추가했습니다. repository.findAll()을 호출하여 엔티티 목록 (이 경우 Product)을 채 웁니다. 각각의 이전 엔티티도 캐시 키를 유지하므로이 목록을 반복하여 & 캐시를 채 웁니다. 또는 그렇게 생각합니다.
@PostConstruct
private void initializeCacheFromDB() {
List<Product> productList = new ArrayList<>();
repository.findAll().forEach(productList::add);
for (Product product : productList) {
// update the cache
// NOTE: below has no effect!
productCache.put(product.getCacheKey(), product);
// update/set the keys
CustomKeyGenerator.addKey(product.getCacheKey());
}
// does nothing!!!! ... no entries so keys not associated w/ Product(s)
//productCache.getAll(CustomKeyGenerator.getKeysSet());
System.out.println("done w/ initializeCacheFromDB()");
}
하지만 콘솔이 앱을 확인한 후. 시작했다면, 나는 그 목록이 비어있는 나머지 끝점으로 이동한다.
그래서, 내 질문은 시작시 지속되는 데이터로 캐시를 채우는 방법입니다.