Develop with pleasure!

福岡でCloudとかBlockchainとか。

Play 2 のPluginを実装

Play Framework 2.0はアプリケーションの実装をPluginで拡張できる仕組みが用意されてる。

デフォで適用されるPluginは↓(play.api.Application.scalaより)

/**
   * The plugins list used by this application.
   *
   * Plugin classes must extend play.api.Plugin and are automatically discovered
   * by searching for all play.plugins files in the classpath.
   *
   * A play.plugins file contains a list of plugin classes to be loaded, and sorted by priority:
   *
   * {{{
   * 100:play.api.i18n.MessagesPlugin
   * 200:play.api.db.DBPlugin
   * 250:play.api.cache.BasicCachePlugin
   * 300:play.db.ebean.EbeanPlugin
   * 400:play.db.jpa.JPAPlugin
   * 500:play.api.db.evolutions.EvolutionsPlugin
   * 1000:play.api.libs.akka.AkkaPlugin
   * 10000:play.api.GlobalPlugin
   * }}}
   *
   * @see play.api.Plugin
   */

数字が小さい方から順番に実行される。

Pluginを自作する場合はplay.api.Pluginというtraitを継承して実装する。

package sample

import play.api.{Application, Plugin}

class CustomPlugin(app: Application) extends Plugin{

  override def onStart() {
    // 起動時の処理
  }

  override def onStop() {
    // 終了時の処理
  }
}

作成したPluginを組み込むにはconf直下にplay.pluginsというファイルを生成して、Pluginのクラスと実行したい順番を定義する。
テスト時のみPluginを適用したい場合はconf直下ではなく、test/resources直下にplay.pluginsを配置すればいい。

401:sample.CustomPlugin

こんな感じでお手軽にPluginを適用できる。