apeescape2.com
  • メイン
  • Uiデザイン
  • ブランドデザイン
  • ライフスタイル
  • プロジェクト管理
バックエンド

EhCacheアノテーションを使用したSpringでのキャッシュ

EhCache は広く使用されている純粋なJavaキャッシュであり、SpringやHibernateなどの最も一般的なJavaフレームワークと簡単に統合できます。プロジェクトに簡単に統合できるため、Javaアプリケーションにとって最も便利な選択肢と見なされることがよくあります。特に:

  • プロジェクトにJARを含めるだけで設定できます。追加のインストール手順は必要ありません。
  • アプリケーションと同じプロセスで実行されるため、高速です。実行するために追加のサービスは必要ありません。

つまり、EhCacheは純粋なJavaアプリケーションに最適です。

さらに、 EhCacheSpringアノテーション メソッドの実装を変更することなく、キャッシュ可能なメソッドにアノテーションを追加するだけで、Springアプリケーションにシームレスに統合できます。



EhCacheは、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。全体的なファイル構造は次のようになります。

初期のSpringプロジェクト構造。

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

シンプルなRESTfulWebサービス

プロジェクトが適切に構成されたので、簡単な「メッセージサービス」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クライアントとして。

EhCacheSpringアノテーションをプラグインする

それでは、EhCacheを機能させましょう。 EhCacheを適切に実行するようにプロジェクトを構成するには、いくつかの簡単な手順を実行するだけです。

EhCache Spring Annotationsを使用すると、EhCacheをアプリに簡単かつシームレスにデプロイできます。

llc s corp vs c corp

ステップ1:EhCacheSpringアノテーションを使用するように依存関係を更新する

Mavenの com.googlecode.ehcache-spring-annotations ehcache-spring-annotations 1.2.0 にEhCacheSpringAnnotations依存関係を追加します。

org.springframework.cache.ehcache.EhCacheManagerFactoryBean

手順2:カスタムキャッシュマネージャーを設定する

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

ステップ3:EhCacheを構成する

最後に、EhCache構成ファイルを作成しますsrc/main/resourcesクラスパスで。デフォルトでは、EclipseにはtimeToLiveSecondsが含まれます。クラスパスにファイルを配置します。このファイルは、EhCacheが正しく機能するために必要です。これは、キャッシュ名と、@Cacheableなどの各キャッシュのいくつかのプロパティを定義します。

@Cacheable

ステップ4:キャッシュをテストする

これで、すべてがセットアップされて準備ができたので、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 。

ディープラーニングチュートリアル:パーセプトロンからディープネットワークまで

データサイエンスとデータベース

ディープラーニングチュートリアル:パーセプトロンからディープネットワークまで
スタートアップの価値は何ですか?ガイドラインとベストプラクティス

スタートアップの価値は何ですか?ガイドラインとベストプラクティス

投資家と資金調達

人気の投稿
ポストフラッシュ時代のWebアニメーション
ポストフラッシュ時代のWebアニメーション
Swiftプロパティのラッパーにアプローチする方法
Swiftプロパティのラッパーにアプローチする方法
42億ドルは合理的ですか?インスタカートの評価を評価する方法
42億ドルは合理的ですか?インスタカートの評価を評価する方法
スマートソフトウェアの価格戦略の究極のガイド
スマートソフトウェアの価格戦略の究極のガイド
ビジネスインテリジェンスの歴史を探る
ビジネスインテリジェンスの歴史を探る
 
ApeeScapeがフリーランサー向けの無料タイムトラッキングアプリTopTrackerをリリース
ApeeScapeがフリーランサー向けの無料タイムトラッキングアプリTopTrackerをリリース
シニアフルスタックエンジニア、タレントポストハイヤーチーム
シニアフルスタックエンジニア、タレントポストハイヤーチーム
いいねの予測:単純なレコメンデーションエンジンのアルゴリズムの内部
いいねの予測:単純なレコメンデーションエンジンのアルゴリズムの内部
ツリーカーネル:ツリー構造化データ間の類似性の定量化
ツリーカーネル:ツリー構造化データ間の類似性の定量化
Angular 4フォームの操作:ネストと入力の検証
Angular 4フォームの操作:ネストと入力の検証
人気の投稿
  • phpはすべての投稿データを表示します
  • デザインの原則をリストする
  • Javaでロボットをプログラムする方法
  • 資本予算の第2段階は何ですか?
  • パワーポイントのプレゼンテーションのヒントとコツ
カテゴリー
ヒントとツール モバイル リモートの台頭 計画と予測 収益と成長 投資家と資金調達 アジャイル 収益性と効率性 Webフロントエンド アジャイルタレント

© 2021 | 全著作権所有

apeescape2.com