내 응용 프로그램에는 Ehcache를 봄에 제공되는 모 놀리 식 응용 프로그램이 있습니다. 올바르게 작동합니다. 캐시 구성이 서비스 메서드이고 지연로드가 true임을 알아야합니다. DB.like이에서 쿼리되는 개체의 모든 :클러스터 된 응용 프로그램에서 Ehcache가 작동하지 않습니다.
@Transactional
@Override
@Caching(evict = { @CacheEvict(value = "schoolCache", key = "#school.id")})
public Integer save(School school) {
// Code here
}
으로 Ehcache에 저장됩니다 분명한는 대학에 진학의 게으른 인스턴스는이 같은 모델과 뷰 모델간에 데이터를 교환하는 컨트롤러 계층에서 ModelMapper입니다 :
@RequestMapping(value = "/load/{Id}", method = RequestMethod.GET)
@ResponseBody
public SchoolViewModel load(@PathVariable Integer Id) {
SchoolViewModel schoolViewModel = ModelMapper.map(schoolService.loadByEntityId(Id), SchoolViewModel.class);
return schoolViewModel;
}
If SchoolVie wModel은 ModelMapper에 의해 컨트롤러에있는 DB로부터 학교에있는 object의 속성을 가져옵니다. 그래서 나는 응용 프로그램을 클러스터하고 Ehcache를 Redis로 설정합니다.
무엇이 문제입니까? 처음에 SchoolService의 요청 쿼리 인 DB로부터의 서비스 쿼리와 최대 절전 모드 세션이 열렸 기 때문에 ModelMapper는 모델을 ViewModel에 성공적으로 매핑합니다. 두 번째로 id와 처음에 동일한 ID로 호출 된 서비스 메소드 시간이 레디 스에서 학교 개체를 가져 학교에있는 개체의 특성을 매핑 할 Hiberante, ModelMapper의 세션이없는 것은 제외하고 ... 예외가이처럼 가져옵니다 org.hibernate :에 의해
를 일으켰습니다. LazyInitializationException이 : 프록시를 초기화하지 수 - org.hibernate.proxy.AbstractLazyInitializ에서 org.hibernate.proxy.AbstractLazyInitializer.initialize (AbstractLazyInitializer.java:165) 없음 세션 er.getImplementation org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke (JavassistLazyInitializer.java:185)에서 (AbstractLazyInitializer.java:286) 그래서
어떻게해야합니까? 나를 도울 수있는 가장 좋은 방법은 무엇입니까? 내가 my book 설명 덕분에 많은
스프링 캐시를 사용하지 마십시오. 2 단계 캐싱을 제대로 수행하도록 최대 절전 모드를 구성하십시오. –
최대 절전 모드 L2 캐시가 다른 앱에서 변경되는 것을 감지하는 방법. 앱 1과 app2에서 개체 변경이 감지되면 어떻게됩니까? –
이것은 캐시 구현에 따라 다르지만 대부분 클러스터 기능을 지원합니다. 이는 Hibernate가 다른 서버에서 실행중인 여러 JVM에 대해서조차도이를 조정할 수 있음을 의미합니다. Ehcache와 Infinispan 모두 그것을 지원합니다. BTW는 몇 가지 더 많은 문제를 해결하므로 스스로 R & D를하지 않는 한 직접 해보라고 조언하지 않습니다. – Sanne