2016-10-13 2 views
0
  • 스프링 부트 버전 : 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()"); 
} 

하지만 콘솔이 앱을 확인한 후. 시작했다면, 나는 그 목록이 비어있는 나머지 끝점으로 이동한다.

그래서, 내 질문은 시작시 지속되는 데이터로 캐시를 채우는 방법입니다.

답변