最近、貧しい同時実行の問題に対処する二次キャッシュMyBatisのを使用して、プロジェクトをやって
しかしながら、ジョイントマルチテーブルクエリの場合には、MyBatisの二次キャッシュがダーティデータの問題の読み出しであります
二日ダーティリードデータのこの問題を解決するための方法を考えることです
シンプルさ、パフォーマンス、互換性、拡張性を考慮すると、私はEhcacheのフレームワークは、この問題を解決するための統合に来るspringbootを選びました
私が最初にEhcacheのにこのフレームワークを暴露し、それはまたゼロから考えられています
MyBatisの二次キャッシュ機能をよると、私の考えです
特定のテーブルへの追加や削除は、それに関連付けられたキャッシュを更新するために、すべてのテーブルをクリアするたびに
(サイズは、本明細書中に二方向に分割します。
追加と削除の方法では、キャッシュ操作をクリアするために、関連する関連付けを行う - これは修正がよりかもしれ作る細部の詳細です
どこCRUDメソッド、クラス全体では、関連する団体キャッシュのクリアの操作を行います - 私は、この比較的小さな点を修正するために行う必要があり、それは(いくつかの重要でないを含む)の各メソッド内でキャッシュのクリア操作をトリガーします
)自分の長所と短所を持っています
道に沿って、滑らかではありません
最初に私は私がより良い方法を見つけることができるかどうかを確認するために自分自身をしようと、それは自分自身もそう突然のすべてに新しいです
GitHub MyBatisの強化・キャッシュ上LuanLouis - しかし、問題は、MyBatisの二次キャッシュを解決し参照するにはプラグインがあります
しかし、このプロジェクトは5年前に書かれましたが、最近の更新は今とても速く技術の開発だけで2年前で、そして、動作しない場合があり気持ちを参照するには時間があります
中央リポジトリは、このパッケージを行っていないので、有料でのojdbc14.jarを言うオンライン、自身の後ろにダウンダウンロード、MVNインストール失敗した、不足ジャーパッケージojdbc14
そこに、というOracleのインストールディレクトリいくつかの情報を読んで、同社はこれは、Oracleをインストールしていない;場所にojdbc6または他のojdbcを使用できる情報があり、私はojdbc6をダウンロードしてojdbc8はそれを試してみましたが、そのojdbc瓶を解決することができますパッケージの質問、
ジャーMyBatisの強化キャッシュプラグインはまた、成功したMavenのリポジトリやプロジェクトをインポートしますが、インポートした後、時間を使用しますが、間違った報告書のすべての種類を見つけ、私は、寒さを感じました
常に単純にされているとすぐに、ちょうど他の誰かのプラグインを使用したいので、私は自分自身が使用するプラグインを変更するために行ってきましたができず、必ずしも変更することはできませんしました!これだけあきらめることができ、このプラグインプログラムを使用します
その後、私はオンライン多くの情報を見つけましたが、また多くの手順の例によって行います
ノートやMyBatisの競合を知らないものを、種々の構成、ノートのすべての種類、同じように、または私は無効書きます
(と言うオンライン情報の多くと同様に、二次キャッシュは、私が使用したい理由として、推奨されていませんMyBatisの、あなたは私の前に記事を見ることができます
だから私は遭遇したような問題は)、多くの情報を見つけることができません、いくつかあるべき唯一の自分自身に頼ることができます
多くの可能性と同様に、何度も何度も試みたが、単純に実行しようとする場合、簡単なXML構成は注釈を付け、これがうまくできます。
しかし、現実は残酷ですが、私は、何かを何回試み、成功したかどうか知らないが、最終的には唯一のプログラムを放棄します
ビジネスロジック層を処理するために、独自のコードを記述するか - あなただけの最終案を選択することができます方法はありません
これは無知、Burongyiaの新人です
幸いなことにしようと主張、最終的に解決策を見つけました
設定ehcache.xml
。1 <?XMLバージョン= "1.0"エンコード= "UTF-8" ?> 2 <! - <Ehcacheの> - > 3 < Ehcacheのののxmlns:XSI =「http://www.w3.org/2001/XMLSchema -instance「 4 のxsi:のnoNamespaceSchemaLocation =」ehcache.xsd " > 5 6 <! - 7 ディスクストレージは:キャッシュ内のオブジェクトが一時的に使用しないで、ハードディスクに転送し、Windowsの仮想メモリシステムに類似 8 のパスは:ハードディスクを指定します。パス・ストレージ・オブジェクト 9。 パスがディレクトリで構成することができる: 10 のuser.home(ユーザの自宅) 。11 はuser.dir(ユーザの現在の作業ディレクトリ) 12は java.io.tmpdirの(デフォルトの一時ディレクトリ) 13 ehcache.disk.store.dir(ehcacheを設定ディレクトリ) 14 の絶対パス(例:D:\\ Ehcacheの) 15 参照パス方法:文字列= TMPDIRはSystem.getProperty( "java.io.tmpdirの"); 16 - > 17 < diskStore パス= "java.io.tmpdirの" /> 18である 19。 <! - コンフィギュレーション・プロバイダ1、peerDiscovery、2つの方法の方法によって提供される:自動検出(自動)、手動設定(手動)2、rmiUrls区切られた複数の単語でのアドレスプロバイダのマニュアルモード、| - > 20 <! - <cacheManagerPeerProviderFactory 21ある = "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"クラス 22がある rmiUrls =、手動プロパティ=「peerDiscovery = //127.0.0.1:40002/userCache「/>- > 23 < cacheManagerPeerProviderFactory 24 クラス= "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 25の プロパティ= "peerDiscovery =自動、multicastGroupAddress = 230.0.0.1、multicastGroupPort = 4446、生存時間= 255" /> 26 <! - <cacheManagerPeerProviderFactory 27 クラス= "org.ehcache.distribution.RMICacheManagerPeerProviderFactory" 28の プロパティ= "peerDiscovery =自動、multicastGroupAddress = 230.0.0.1、multicastGroupPort = 4446、生存時間= 255" /> - > 29 30 <!- リスナー1、ホスト名ホストアドレス2、ポート3、ポート、socketTimeoutMillisソケットタイムアウトサブモジュールを構成し、デフォルトでは2000ミリ秒であります- > 31は <! - <CacheManagerPeerListenerFactory 32 クラス= "net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 33がある プロパティ= "ホスト名= 127.0.0.1、ポート= 40001の、socketTimeoutMillis = 2000" /> - > 34である < cacheManagerPeerListenerFactory 35 クラス=「net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory」/> 36 37 38である ! - < 39 、特に明記していない場合、デフォルトのキャッシュ構成、処理されたすべてのオブジェクトは、次の設定項目に応じて:defaultCache 40 maxElementsInMemory:セットキャッシュの上限にオブジェクトストアを記録数 41は 永遠:代表的なオブジェクトか無期限(以下、指定は不定0のための2つの構成についても同様である) 42 timeToIdleSecondsなど:最大アイドル時間/ S 43は timeToLiveSeconds:最大生存時間/ S 44は overflowToDisk:オブジェクトをディスクに書き込むことを許可するかどうかを 45 有効600秒(10分)を確立するために、キャッシュから次の構成:概要。 46 効果的な600秒(10分)以内、連続120秒(2分)キャッシュにアクセスしない場合は、キャッシュが無効化されます。 47 のアクセスがあったとしても、それだけで600秒後も存続します。 48 - > 49 < defaultCache maxElementsInMemory = "10000" 永遠= "falseに" 50 timeToIdleSecondsなど= "600" timeToLiveSeconds = "600" overflowToDisk = "trueに" /> 51は 52である < キャッシュの名前= "*。*。*。*。dao.WarnMapper" maxElementsInMemory = "10000" 永遠= "偽" 53 timeToIdleSecondsなど= "120" timeToLiveSeconds = "300" overflowToDisk = "TRUE" /> 54 55 < キャッシュ名=」 * 。*。*。* .dao.ProjectMapper」maxElementsInMemory = "10000" 永遠= "偽" 56 timeToIdleSecondsなど= "120" timeToLiveSeconds = "300" overflowToDisk = "TRUE" /> 57 <! - <キャッシュ:注釈ドリブン/> - > 58 </ ehcacheを>
設定application.properties
1 #Ehcacheの缓存 2 spring.cache.type = ehcacheを 3 spring.cache.ehcache.config =クラスパス:/ehcache.xml
Yewuluojicengコード
1のCacheManagerのCacheManager = CacheManager.newInstance( "SRC /メイン/リソース/ ehcache.xml" )。 2キャッシュのキャッシュcacheManager.getCache =( "* * * * dao.WarnMapper ...." ); 3 cache.removeAll()。
共通の学習と共通の進捗状況は、どのサプリメントならば、あなたに感謝し、指摘してください!