Play framework 2.0 betaが出たようです6 – Dependency Injectionをやってみよう PlayでDependency injectionを実現する 先日Play framework2.0でおもしろそうなtipsがblogで紹介されていたので、ここでもご紹介。 そのブログ 内容はPlay framework2.0(Scala)でDIを実現しようというものです。 近年のJava系Webアプリケーションで、DIはあたりまえのように使用されていると思います。 Play frameworkにもSpringやGuiceを使用するためのモジュールがありますが、独自にDIの仕組みをもっているわけではありません。 しかし、今回ご紹介するtipsではPlay framework2.0とScala標準の機能(とデザインパターン)でDIを実現しています。 ではblogの内容に
object Global extends GlobalSettings { override def onStart(app: Application): Unit = { Logger.info("Application has started") app.mode.toString match { case "Prod" => Logger.info("Prod mode.") case "Dev" => Logger.info("Dev mode.") case "Test" => Logger.info("Test mode.") case _ => Logger.info("unknown mode.") } } override def onStop(app: Application): Unit ={ Logger.info("Application shutdown ..
SlickでAutoincrementされたIDを追加時に取得し、そのIDを使用して他のテーブルにもレコードを追加する方法 例えばAccountにユーザーを追加、IDはautoincrementされるが、そのIDを利用して他のテーブルにもIDに結びついたレコードを追加したいような場合。 の方法。 環境は play2.4 Slick3.0 mysql 普通にレコード追加して、そのIDを取得する方法としてはオフィシャルドキュメントに載ってるとおり Slick3.0.3 Manual http://slick.typesafe.com/doc/3.0.3/queries.html#inserting val userWithId = (users returning users.map(_.id) into ((user,id) => user.copy(id=Some(id))) ) += U
Slick3ではクエリ(DBIOAction)の構築と実行とが分離されていて、予めクエリを合成した上で一つの機能にしてから実行できる。 そのうちいくつか試したものを備忘録としてメモする。 存在しなければINSERTを実行 その1 アカウントテーブルのTableQueryに対して、アプリケーション初期化時にレコードがなければINSERTを実行する方法 // class Accounts(tag: Tag) extends Table[Account]("ACCOUNTS", tag) { ... } val accounts = TableQuery[Accounts] val initialAccount = Account(...) val insertIfEmpty = accounts.length.result.filter(_ == 0).flatMap(_ => account
結論から先に 巨大なファイルを読み込んで DB に投入するケースのように、Slick 3 の非同期 DB I/O を使って一度に大量の SQL を実行する場合は: うまいこと DBIOAction を合成してやらないと Thread Pool の実行キューが溢れてエラーになります。 さらにその DBIOAction は grouped で適度に分割してやらないと StackOverflow が発生します。 というお話。サンプルコードは結構適当なので間違っている部分があるかも知れません (まだ Slick 3 での記述スタイルを試行錯誤中なのと、この問題を徹夜で調べて明け方の頭で書いているためです)。 DBIOAction を合成しよう 合成しない書き方 TSV ファイルを読み込んで、レコードが既に存在していれば更新、存在していなければ追加、というありがちな処理を実装します (分離レベルをR
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く