2016-10-19 8 views
0

play-slickプラグインを使用してmySQLデータベースと対話しようとしています。すべては私がコードをコンパイルするたびに得る[warn]以外の期待どおりに動作します。この行でPlay 2.5プレイスケープのための依存性注入データベース設定

val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)

警告がある:method current in object Play is deprecated: This is a static reference to application, use DI instead

私はdependency injectionを使用してConfigurationを定義してinject()メソッドを追加しようとしましたが、機能しません。私は推奨されませんPlay 2.5

import play.api.Play 
import play.api.db.slick.DatabaseConfigProvider 
import scala.concurrent.Future 
import slick.driver.JdbcProfile 
import slick.driver.MySQLDriver.api._ 
import scala.concurrent.ExecutionContext.Implicits.global 


case class User(
    id: Long, 
    firstName: String, 
    lastName: String, 
    mobile: Long, 
    email: String 
) 

class UserTableDef(tag: Tag) extends Table[User](tag, "users") { 

    def id = column[Long]("id", O.PrimaryKey,O.AutoInc) 
    def firstName = column[String]("first_name") 
    def lastName = column[String]("last_name") 
    def mobile = column[Long]("mobile") 
    def email = column[String]("email") 

    override def * = 
    (id, firstName, lastName, mobile, email) <>(User.tupled, User.unapply) 
} 

object Users { 

    val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current) //<-- PROBLEM 

    val users = TableQuery[UserTableDef] 

    def get(id: Long): Future[Option[User]] = { 
    dbConfig.db.run(users.filter(_.id === id).result.headOption) 
    } 

} 

答えて

2

Play currentので、蜂は非推奨たPlay.currentを使用する必要がないようにどのように私は次のコードでDependency Injectionを使用してください。 DBConfigProviderはguiceを使用して挿入されます。

DatabaseConfigProviderは、guice依存性注入を使用してクラスUsersRepoに注入されます。ここで

この使用Guiceの操作を行うと、あなたは別のクラスから存在している()メソッドを呼ぶのですかapplication.conf

slick.dbs.default.driver="slick.driver.PostgresDriver$" 
slick.dbs.default.db.driver="org.postgresql.Driver" 
slick.dbs.default.db.url="jdbc:postgresql://ec2-54-217-243-228.eu-west-1.compute.amazonaws.com:5432/d344onl0761ji5?user=user&password=pass" 
slick.dbs.default.db.user=user 
slick.dbs.default.db.password="pass" 
+0

play-slickを使用した場合2.5

case class User(profileName: ProfileName, email: Email, createdAt: DateTime, id: UserId) @Singleton class UsersRepo @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) { val dbConfig = dbConfigProvider.get[JdbcProfile] import dbConfig.driver.api._ private[services] val users = TableQuery[Users] def exists(id: UserId): DBIO[Boolean] = { users.filter(_.id === id).exists.result } private[services] class Users(tag: Tag) extends Table[User](tag, UsersTable.name) { def profileName = column[ProfileName]("profile_name") def id = column[UserId]("user_id", O.PrimaryKey) def email = column[Email]("email") def createdAt = column[DateTime]("created_at") def * = (profileName, email, source, createdAt, id) <> (User.tupled, User.unapply) def emailIndex = index("users_email_index", email, true) } } 

DB構成を再生する方法です? – summerNight

+1

@summerNight ....ユーザーに別のクラスにレポを注入して使用してください。プレイ2.5と依存性注入ガイド – pamu

+0

@ f.g:他のオブジェクトからexist()メソッドを呼び出すにはどうすればよいですか?オブジェクトの注入はできません。 –