EhCache は広く使用されている純粋なJavaキャッシュであり、SpringやHibernateなどの最も一般的なJavaフレームワークと簡単に統合できます。プロジェクトに簡単に統合できるため、Javaアプリケーションにとって最も便利な選択肢と見なされることがよくあります。特に:
つまり、EhCacheは純粋なJavaアプリケーションに最適です。
さらに、 EhCacheSpringアノテーション メソッドの実装を変更することなく、キャッシュ可能なメソッドにアノテーションを追加するだけで、Springアプリケーションにシームレスに統合できます。
EhCacheは、プログラムでキャッシュを操作するための簡単で豊富なAPIを提供しますが、この記事では主に Springアプリケーションを後押しする EhCache Spring Annotationsを使用すると、邪魔にならない方法で。 Spring MVCプロジェクトをセットアップし、TomcatにRESTfulWebサービスをデプロイします。次に、EhCacheがWebサービスに統合されます。
サンプルプロジェクトのコンテキストでEhCacheアノテーションを示します。を設定します 春 でホストされているMVCベースのWebサービス Tomcat 8 サーバ。
私はEclipseでプロジェクトを開発しました。これは、指示に従ってインストールできます。 ここに 。
知覚組織におけるゲシュタルトの原則
Tomcatの最新の安定バージョンであるTomcat8をダウンロードできます ここに 。
もちろん、これらの特定のプラットフォームはEhCacheの要件ではありません。お気に入りのIDEとサーバーをいつでも選択できます。
EhCache Spring AnnotationsJARが利用可能です ここに 。ご覧のとおり、バージョンごとに2つのJARがあります。1つは依存関係あり、もう1つは依存関係なしです。依存関係のあるものには、EhCacheアノテーションが機能するために必要なEhCache2とSpring3も含まれています。依存関係のあるものをダウンロードしてビルドパスに追加すると、セットアップが簡単になります。
EhCache SpringAnnotationsはSpring4とも互換性がありますが、個別に構成する必要があります。プロジェクトが近い将来EhCache3をサポートするかどうかは明確ではありません。 EhCache 3を使用している、または使用する予定のある人には、この記事で説明する注釈アプローチはお勧めしません。
最後に、Mavenを使用してすべてを管理します。 Mavenは、ほとんどのEclipseインストールにあらかじめパッケージ化されていますが、入手することもできます。 ここに 。この記事の後半で示すように、SpringMVCとEhCacheSpringAnnotationsの依存関係はかなり簡単に追加できます。
これまでにSpringプロジェクトを設定したことがない場合は、次のことも確認できます。 この件に関するStefanVargaの投稿 有益です。
2016年に販売されたドローンの数
このデモンストレーションでは、Mavenを使用して基本的なプロジェクトを設定します 原型 maven-archetype-webapp
。全体的なファイル構造は次のようになります。
src/main/java
、com.toptal.blog
、およびcom.toptal.blog.cache
の3つのパッケージを使用してディレクトリcom.toptal.blog.service
を作成します。以下で説明するように、アプリケーションソースはこれらのパッケージに含まれます。
知覚組織のゲシュタルト法
web.xml
で「springrest」というTomcatサーブレットを定義しましょう。
... springrest org.springframework.web.servlet.DispatcherServlet 1 springrest /*
特に明記されていない限り、Spring MVC DispatcherServlet
{servlet-name}-servlet.xml
という名前のXML構成ファイルを探しますディレクトリWEB-INF
にあります。 springrest-servlet.xml
という構成ファイルを作成しましょう。 @RequestMapping
でアノテーションが付けられたSpringプロセスコントローラーメソッドを有効にするには、このファイルに追加するだけです。また、追加することでBeanを自動的にスキャンして登録するSpringの基本パッケージを定義しましょう。 springrest-servlet.xml
構成は次のようになります。
project.toptal.blog
プロジェクトが適切に構成されたので、簡単な「メッセージサービス」APIを実装しましょう。基本パッケージSpringRestControllerWithEhCache.java
に@RestController @RequestMapping( '/' ) public class SpringRestControllerWithEhCache { @Autowired MessageService messageService; @RequestMapping( value = '/message/{id}', method = RequestMethod.GET ) public String getMessage( @PathVariable Integer id ) { String message = messageService.getMessage( id ); System.out.println( 'get message ['+message+'] at '+new Date() ); return message; } @RequestMapping( value = '/message/set/{id}/{message}', method = RequestMethod.POST ) public String setMessage( @PathVariable Integer id, @PathVariable String message ) { System.out.println( 'set message ['+message+'] at '+new Date() ); messageService.setMessage( id, message ); return message; } }
を追加し、IDでメッセージを取得するためのGETメソッドとIDでメッセージを設定するためのPOSTメソッドを1つ追加します。
MessageService
com.toptal.blog.service
を定義しますHashMap
のクラス。システムオブレコード(SOR)に保存されているメッセージにアクセスします。本番アプリでは、SORはリレーショナルデータベースのようなものになります。簡単にするために、@Service public class MessageService { private ConcurrentHashMap messages = new ConcurrentHashMap(); public String getMessage( Integer id ) { System.out.println( 'Getting data from SOR......' ); return messages.get( id ); } public void setMessage( Integer id, String message ){ messages.put( id, message ); } }
を使用します。
http://localhost:8080/EhCacheExample/message/set/1/test_message
ここで、プロジェクトをWARとしてエクスポートし、Tomcatにデプロイすると、http://localhost:8080/EhCacheExample/message/1
でHTTPPOSTリクエストを作成することにより、ID = 1の場合に「test_message」などのメッセージを設定できるはずです。これで、pom.xml
でのHTTPGETリクエストで「test_message」を取り戻すことができるはずです。使った 不眠症 テストを行うのに便利なRESTクライアントとして。
それでは、EhCacheを機能させましょう。 EhCacheを適切に実行するようにプロジェクトを構成するには、いくつかの簡単な手順を実行するだけです。
llc s corp vs c corp
Mavenの com.googlecode.ehcache-spring-annotations ehcache-spring-annotations 1.2.0
にEhCacheSpringAnnotations依存関係を追加します。
org.springframework.cache.ehcache.EhCacheManagerFactoryBean
SpringにはEhCacheキャッシュマネージャーcom.toptal.blog.cache.CustomCacheManager
が組み込まれています。これはほとんどのキャッシュ状況に適していますが、カスタムキャッシュマネージャーを定義すると、同じキャッシュマネージャーを使用して、プログラムで、または注釈を使用してキャッシュを制御できるため、便利であることがわかりました。この記事ではアノテーションに焦点を当てていますが、必要な場合に備えて、カスタムキャッシュマネージャーを定義してみましょう。デフォルトのキャッシュマネージャーを使用したい場合は、この手順をスキップできます。
public class CustomCacheManager extends net.sf.ehcache.CacheManager{ public CustomCacheManager(){ super(); } /* Add your own cache methods here. * * public void myCustomCacheMethod(){ * // your code here * } * */ }
で新しいクラスを定義します。
springrest-servlet.xml
... ...
を更新して有効にします次のように:
ehcache.xml
最後に、EhCache構成ファイルを作成しますsrc/main/resources
クラスパスで。デフォルトでは、EclipseにはtimeToLiveSeconds
が含まれます。クラスパスにファイルを配置します。このファイルは、EhCacheが正しく機能するために必要です。これは、キャッシュ名と、@Cacheable
などの各キャッシュのいくつかのプロパティを定義します。
@Cacheable
これで、すべてがセットアップされて準備ができたので、EhCacheの使用は簡単で幸せな作業になるはずです。 getMessage
を追加するだけです。キャッシュしたいメソッドまたはクラスに。たとえば、MessageService
を追加しました@Cacheable( cacheName = 'messageCache' ) public String getMessage( Integer id ) { System.out.println( 'Getting data from SOR......' ); return messages.get( id ); }
へhttp://localhost:8080/EhCacheExample/message/set/1/newMessage
のメソッド。とても簡単です!
http://localhost:8080/EhCacheExample/message/1
キャッシュが機能していることをテストするには、timeToLiveSeconds
でHTTPPOSTリクエストを発行してID = 1のメッセージを作成し、| _ + _へのGETリクエストでID = 1のメッセージを複数回取得します。 |。以下のコンソール出力でわかるように、WebサービスはSORに、最初にメッセージを要求したときにメッセージを取得するように要求しますが、次の2つの要求では取得せず、代わりにキャッシュされたメッセージを返します。 set message [newMessage] at Sun Dec 06 23:55:39 MST 2015 get message [newMessage] at Sun Dec 06 23:55:42 MST 2015 Getting data from SOR...... get message [newMessage] at Sun Dec 06 23:55:47 MST 2015 get message [newMessage] at Sun Dec 06 23:55:49 MST 2015 get message [newMessage] at Sun Dec 06 23:55:54 MST 2015 Getting data from SOR......
を定義したからです10になると、WebサービスはSORを呼び出して、10秒後にメッセージを再度取得します。
@TriggersRemove
現在、キャッシュがもたらす速度と利便性を楽しんでいます。EhCacheは、10秒ごとに自動的に更新するのに十分です。しかし、SORが更新された直後に更新したい場合はどうなりますか? EhCache SpringAnnotationはsetMessage
を提供します注釈付きメソッドが呼び出されたときに、指定されたキーをキャッシュから削除します。メッセージサービスAPIでは、getMessage
のときに、キャッシュされたメッセージをキャッシュから削除する必要があります。と呼ばれます。したがって、次回は@Cacheable( cacheName = 'messageCache', keyGenerator = @KeyGenerator ( // method name is not included in cache key to work with @TriggersRemove name = 'HashCodeCacheKeyGenerator', properties = @Property( name='includeMethod', value='false' ))) public String getMessage( Integer id ) { System.out.println( 'Getting data from SOR......' ); return messages.get( id ); } @TriggersRemove( cacheName = 'messageCache', keyGenerator = @KeyGenerator ( name = 'HashCodeCacheKeyGenerator', properties = @Property( name='includeMethod', value='false' ))) public void setMessage( @PartialCacheKey Integer id, String message ) { messages.put( id, message ); }
リクエストが届くと、キャッシュはSORから新しいレコードをフェッチします。
@KeyGenerator
キージェネレーターは、キャッシュマネージャーがキャッシュキーを生成するために使用します。事前定義されたキャッシュキージェネレーターのリストがあります ここに 。デフォルトでは、setMessage
メソッド名と渡されたパラメーターの両方を使用して、キャッシュキーを生成します。しかし、getMessage
が必要なのでincludeMethod
と同じキーを生成するメソッドそのキーに関連付けられているキャッシュ値を削除するには、メッセージIDのみをキーとして使用し、キー生成のメソッド名を削除する必要があります。したがって、キージェネレータのfalse
を設定しますプロパティはsetMessage
になります両方の方法で。また、@PartialCacheKey
以降2つの引数があり、EhCacheのid
を使用しますmessageCache
の注釈キージェネレーターで使用する必要があるのはそれだけであることを指定するパラメーター。最後に、このリソースタイプ用に専用キャッシュHTTP POST: http://localhost:8080/EhCacheExample/message/set/1/newMessage1 HTTP GET:http://localhost:8080/EhCacheExample/message/1 HTTP POST: http://localhost:8080/EhCacheExample/message/set/1/newMessage2 HTTP GET:http://localhost:8080/EhCacheExample/message/1
を構成したことを思い出してください。したがって、キーにIDのみを使用しても、他のリソースタイプと競合する危険はありません。
ここで、ID = 1のメッセージに対して複数のHTTPリクエストを実行すると、次のようになります。
スタートアップにとって、事業の一部を購入する投資家は次のように言うことができます。
set message [newMessage1] at Tue Dec 08 17:53:44 MST 2015 get message [newMessage1] at Tue Dec 08 17:53:47 MST 2015 Getting data from SOR...... set message [newMessage2] at Tue Dec 08 17:53:50 MST 2015 get message [newMessage2] at Tue Dec 08 17:53:53 MST 2015 Getting data from SOR......
コンソールには次のように表示されます。
|_+_|
最終的なプロジェクト構造は次のようになります。
この例では、最初に単純なSpring MVC RESTfulWebアプリケーションを作成しました。次に、既存のアプリケーションコードを1行も変更せずに、EhCache SpringAnnotationsを使用してEhCacheをアプリケーションにシームレスに統合しました。 EhCache Spring Annotationsは、インストールが簡単で(Maven依存関係を追加することで)、使いやすく(メソッドにアノテーションを追加することで)エレガントであることを示しました。
EhCacheドキュメントが見つかります ここに EhCache SpringAnnotationsのドキュメントは ここに 。
また、この記事で説明されているサンプルプロジェクトをチェックしてください。 GitHub 。