質問: (string) el.getobjectvalue(); system.out.println("value is: " + value); } manager.shutdown(); } そして、これが私のキャッシュ設定です(ehcache.xml):<ehcache xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="../config/ehcache.xsd"> <diskstore path="c:/mycache"/><!-- java.io.tmpdir --> <defaultcache maxelementsinmemory="10000" eternal="true" timetoidleseconds="120" timetoliveseconds="120" overflowtodisk="true" maxelementsondisk="10000000" diskpersistent="true" diskexpirythreadintervalseconds="120" memorystoreevictionpolicy="lru" /> </ehcache> 最初の実行後にディスク上にtest.indexファイルとtest.dataファイルが表示されたとしても、この関数からの出力は常に次のようになります(ディスクからキャッシュをロードすることはないようです)。 キャッシュが見つかりません。キャッシュを作成しています... ディスクにキャッシュします。ディスク上のキャッシュサイズ:2 ここで何かばかげたことをしているに違いありませんが、私にはわかりません!
回答: manager.cacheexists(..)テストを削除し、testcache = manager.getcache("test");ではなくnew cache(..)を使用してキャッシュを作成する必要があると思います。キャッシュがdiskpersistentであっても、初めて取得するまで存在しません。 (私がgetcache(..)を使用しているだけで、それはあなたが探しているものとまったく同じです)注意:次のようなものを追加して、キャッシュが存在することを確認することもできます。_cache cache = manager.getcache(name); if (cache == null) { throw new nullpointerexception(string.format("no cache with name %s defined, please configure it in %s", name, url)); } _注2:設定ファイルの名前がehcache.xmlである場合は、cachemanager.create(url)を使用しないでください。代わりに、cachemanagerシングルトンを使用します。 cachemanager.create(url)とnew cachemanager(url)の使い方を混同していると思います。それでも、_ehcache.xml_およびnew cachemanager(url)にはシングルトンを使用してください。_// ehcache.xml - shared between different invocations cachemanager defaultmanager = cachemanager.getinstance(); // others - avoid calling twice with same argument cachemanager manager = cachemanager.create(url); _cachemanager.create(..)の使用には問題があります渡されたurlを完全に無視する可能性があります create(..)メソッドまたはgetinstance()のいずれかが以前に呼び出された場合:_public static cachemanager create(url configurationfileurl) throws cacheexception { synchronized (cachemanager.class) { if (singleton == null) { if (log.isdebugenabled()) { log.debug("creating new cachemanager with config url: " + configurationfileurl); } singleton = new cachemanager(configurationfileurl); } return singleton; } } _そのため、cachemanager.create(..)メソッドの使用はお勧めしません。 cachemanager.getinstance()またはnew cachemanager(url)を使用します。