私のアプリケーションには、Ehcacheを実行するために提供されるモノリシックアプリケーションがあります。正しく動作します。キャッシュ設定がサービスメソッドであり、遅延ロードが真であることを知っておくことが重要ですDB.likeこのことから照会され、そのオブジェクトのすべて:クラスタ化されたアプリケーションでEhcacheが動作しない
@Transactional
@Override
@Caching(evict = { @CacheEvict(value = "schoolCache", key = "#school.id")})
public Integer save(School school) {
// Code here
}
Ehcacheの中に保存されているものは明らかであるが、school.Thereの怠惰なインスタンスでは、このようなモデルとのViewModelの間でデータを交換するためにコントローラ層で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;
}
SchoolVieの場合wModelには、ModelMapperのコントローラでDBから取得された、学校にあるオブジェクトの属性があります。 私はアプリケーションをクラスタ化し、EhcacheをRedisに設定します。
問題は何ですか?最初にSchoolServiceからのリクエストクエリー、DBからのこのサービスクエリー、およびhibernateのセッションが開いているので、ModelMapperはモデルをViewModelに正常にマッピングします.2回目は、最初にidと同じidで呼び出されたサービスメソッド時間はRedisのから学校オブジェクトを取得し、学校にあるオブジェクトの属性をマップするHiberante、ModelMapperのセッションが存在しないことはexception.The例外は、このようなものです取得します。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) ので
私はどのように行うのですか?私を助ける最良の方法は何ですか? どうもありがとう
Spring Cacheを使用しないでください。第2レベルのキャッシュを適切に行うために休止状態を構成します。 –
他のアプリでは、どのように変化しているのでしょうか?アプリ1とアプリ2のオブジェクトの変更がそれを感じたら? –
これはキャッシュの実装によって異なりますが、ほとんどはクラスタリング機能をサポートしています。これは、Hibernateが、異なるサーバ上で実行されている複数のJVMであってもそれらと連携できることを意味します。 EhcacheとInfinispanはどちらもそれをサポートしています。 BTWはさらにいくつかの問題を解決していますので、あなた自身でR&Dをやっていない限り、これを自分で行うようアドバイスすることはありません。 – Sanne