다음 Play Slick DAO 클래스가 있습니다. 데이터베이스 구성은 상수 control0001
입니다.Play Slick에서 동적으로 삽입 된 데이터베이스 이름 할당
class UsersDAO @Inject()(@NamedDatabase("control0001")
protected val dbConfigProvider: DatabaseConfigProvider)
extends HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
def readUser (userid: String) = {
val users = TableQuery[UserDB]
val action = users.filter(_.userid === userid).result
val future = db.run(action.asTry)
future.map{
case Success(s) =>
if (s.length>0)
Some(s(0))
else
None
case Failure(e) => throw new Exception ("Failure in readUser: " + e.getMessage)
}
}
}
@NamedDatabase("control0001")
대신에 상수를 갖는, I 가변 할 데이터베이스를 필요 다음 DAO는 사용자 ID에 기초하여 사용자를 읽는 기능 readUser
있다. 이 응용 프로그램에서는 application.conf
에 구성된 여러 데이터베이스 (control0001
, control002
등등)가 있습니다. 변수 값에 따라 DAO에서 사용할 데이터베이스를 결정해야합니다. 모든 데이터베이스는 유사하며 동일한 테이블을 가지고 있습니다 (각 데이터베이스의 데이터가 다릅니다).
은 다음 재생 클래스는 DAO 함수를 호출하지만, 먼저 주입 할 데이터베이스 이름을 결정해야한다 : 이것은 재생 슬릭에
class TestSlick @Inject()(dao: UsersDAO) extends Controller {
def test(someCode: Int, userId: String) = Action { request =>
val databaseName = if (someCode == 1) "control0001" else "control0002"
// Run the method in UsersDAO accessing the database set by databaseName
val future = dao.readUser(userId)
future.map { result =>
result match {
case Some(user) => Ok(user.firstName)
case _ => Ok("user not found")
}
}
}
}
을 달성 할 수 있는가?
내가 당신의 아이디어를 사용하여 결국, 대신 JDBC의 나는 JNDI 연결 : 컨트롤러에서 다음
을 다음
SlickApi
를 얻으려면SlickComponents
특성에 섞는다. 연결을 사용하고 나면 연결을 끊어야합니까? – ps0604나는 그럴 수는 없지만, 유창한 플러그인을 사용하지 말고,이 예제를 확인하십시오. https://github.com/playframework/play-scala-isolated-slick-example – cutoffurmind
JNDI 연결을 끊을 필요가있는 경우의 예 – ps0604