Play Framework Evolutionsでファイル名を1.sql, 2.sql...以外にする
やりたいこと
Play Frameworkで用意されているDBマイグレーションツールにEvolutionsがあるが、ファイル名が連番でしか指定できず、後から見たときに何をやっているのかが分かりづらいなどの問題がある。 これを、下記のようにファイル名を指定できるようにしたい。
conf/evolutions/default 1_create_table_users.sql 2_create_table_roles.sql ...
ほとんど全く同じ事をする記事で下記の記事があったが、もっと簡単に出来たのでこの記事に残しておく。
コード
package modules import java.io.{FileInputStream, InputStream} import javax.inject._ import play.api.Environment import play.api.db.evolutions._ import play.api.inject._ class EvolutionsModule extends SimpleModule( bind[EvolutionsConfig].toProvider[DefaultEvolutionsConfigParser], bind[EvolutionsReader].to[CustomEvolutionsReader], bind[EvolutionsApi].to[DefaultEvolutionsApi], bind[ApplicationEvolutions].toProvider[ApplicationEvolutionsProvider] ) @Singleton class CustomEvolutionsReader @Inject()(environment: Environment) extends ResourceEvolutionsReader { override def loadResource(db: String, revision: Int): Option[InputStream] = { val evolutionDirectory = environment.getFile(Evolutions.directoryName(db)) evolutionDirectory.listFiles() .find(f => f.getName.endsWith(".sql") && f.getName.startsWith(s"${revision}_")) .map(new FileInputStream(_)) } }
さらに、元記事同様に application.conf
に下記を追記する。
play.modules { enabled += "modules.EvolutionsModule" disabled += "play.api.db.evolutions.EvolutionsModule" }
リロードすると連番SQL以外でもマイグレーションが適用される。