PlayFramework では、デフォルトで Ehcache というキャッシュライブラリを利用できます。
Ehcache はディスクに永続化する設定となっていないため、例えばセッション情報をキャッシュに保存している場合、ソースを変更してコンパイルが走るとキャッシュが全部削除されログイン状態ではなくなります。
開発時ですのでいちいちログインし直すのが面倒です。そこで、Ehcache の設定ファイルを作成しキャッシュをディスクに永続化してみます。
設定ファイルの配置場所
Ehcache の設定ファイルは以下の順番で検索され、存在するものを利用します。
- 設定ファイルの
ehcache.configResource
に指定されたリソースパス -
conf/ehcache.xml
ファイル - デフォルトで定義されている
ehcache-default.xml
特に気にする必要がなければ、 conf/ehcache.xml
に配置するといいでしょう。
永続化する設定
以下の内容で設定ファイルを作成します。よく分からない人はコピペでいいです。 (自分もよく分からない)
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" updateCheck="false">
<!-- ehcache 永続化ファイルのパスを指定 -->
<diskStore path="user.dir/.ehcache" />
<!-- diskPersistent="true" で永続化を有効にする (デフォルトは false) -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
maxElementsOnDisk="10000000"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
この内容のファイルを conf/ehcache.xml
に配置してサーバを起動すると、 PROJECT_ROOT/.ehcache
ディレクトリに Ehcache の永続化ファイルが作成されます。
設定のポイントは以下の 2 点です。
-
<diskStore>
タグ
このタグを作成しpath
属性で永続化ファイルを配置するパスを指定します。user.dir
はプロジェクトのルートディレクトリに変換されるようです。 -
diskPersistent
属性
この項目にtrue
を設定すると、JVM が再起動される際にキャッシュデータを永続化するようになります。
まとめ
Ehcache を永続化する設定についてまとめてみました。
これでいちいちログインしなくても良くなります!ただ、本番環境にて Ehcache を使用する場合で永続化が不要な場合は、設定ファイルが有効にならないように注意しましょう。