0

@Cachableを使用するメソッドがあります

@Cacheable(value="airport", key="#filter")
public static String getAirport(String filter, SessionFactory sessionFactory){
    String airportsDisplay = "";
    Session session = sessionFactory.openSession();
    airportsDisplay = (String) session.createQuery("select iata from Airports a where a.displaystr = :accfilter").setString("accfilter", filter.toUpperCase()).uniqueResult();
    session.close();
    return airportsDisplay;
}

指定されたフィルターを使用したデータベースクエリのみを実行し、空港名を返します。

xmlconfiguratinは

<cache name="airport"
   maxElementsInMemory="100"
   eternal="false"
   timeToIdleSeconds="1200"
   timeToLiveSeconds="1200"
   overflowToDisk="true"
   maxElementsOnDisk="10000000"
   diskPersistent="true"
   diskExpiryThreadIntervalSeconds="1200"
   memoryStoreEvictionPolicy="LRU"/>

問題は、結果がキャッシュされないことです。

デプロイ時に、airport.dataは通常どおり作成されますが、Webアプリからメソッドを何度呼び出しても、常に空になります。

何か提案はありますか?

4

1 に答える 1

5

このメソッドは静的であるため、Spring Beanの一部ではなく、Springはメソッドの呼び出しをインターセプトして、呼び出す代わりにキャッシュされた結果を返すことはできません。キャッシュ可能にできるのはSpringBeanメソッドのみです。

于 2013-01-04T09:07:48.037 に答える