播放:获取到默认数据库的连接
Play: obtaining a connection to the default database
我想获得与我在 application.conf:
中编写时定义的数据库实例的连接
db.default {
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
username = ...
password = ...
}
docs 说我们应该将 db: Database
注入控制器(工作正常), 没有其他方式 。预定义的 Guice 注入是隐藏的(不在 Module.scala 中)。它还表明默认数据库单例由 Play 自动创建。
如果我不想将数据库注入控制器,而是将关注点分开并仅在某些 SqlHandler
对象中使用它,唯一的工作就是执行 SQL 查询怎么办:
object SqlHandler {
val db: Database = ???
def select(params) {...db...}
def insert(params) {...db...}
}
我知道我可以用 play.api.db.Databases
创建一个新的数据库实例,比如
import play.api.db.Databases
val db: Database = Databases(
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
username = ...
password = ...
)
但我不仅觉得重复所有信息很愚蠢,而且我相信它还会创建两次数据库(一次是自动的,一次是手动的,不是吗?)。
是否有任何方便的方法来获得与我的默认数据库的连接,或者我如何我可以使用 Guice 将它注入其他地方?
此答案假定您要将 SqlHandler
注入控制器。
如果是这样,您可以在控制器中执行此操作:-
class Application @Inject() (sql: SqlHandler) extends Controller {
def index = Action { implicit request =>
...
sql.someSQLHandlerBehaviour()
...
}
}
由于控制器是由 Guice 开箱即用地管理的,因此任何可注入对象也将属于 Guice 生命周期管理的范围。所以你应该能够像上面那样将你的 SqlHandler
注入控制器。
并且由于您的 SqlHandler
现在由 Guice 管理,您可以像这样将 jdbc
依赖项注入 SqlHandler
。
@Singleton
class SqlInjector @Inject() (db: Database) { ... }
我想获得与我在 application.conf:
中编写时定义的数据库实例的连接db.default {
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
username = ...
password = ...
}
docs 说我们应该将 db: Database
注入控制器(工作正常), 没有其他方式 。预定义的 Guice 注入是隐藏的(不在 Module.scala 中)。它还表明默认数据库单例由 Play 自动创建。
如果我不想将数据库注入控制器,而是将关注点分开并仅在某些 SqlHandler
对象中使用它,唯一的工作就是执行 SQL 查询怎么办:
object SqlHandler {
val db: Database = ???
def select(params) {...db...}
def insert(params) {...db...}
}
我知道我可以用 play.api.db.Databases
创建一个新的数据库实例,比如
import play.api.db.Databases
val db: Database = Databases(
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
username = ...
password = ...
)
但我不仅觉得重复所有信息很愚蠢,而且我相信它还会创建两次数据库(一次是自动的,一次是手动的,不是吗?)。
是否有任何方便的方法来获得与我的默认数据库的连接,或者我如何我可以使用 Guice 将它注入其他地方?
此答案假定您要将 SqlHandler
注入控制器。
如果是这样,您可以在控制器中执行此操作:-
class Application @Inject() (sql: SqlHandler) extends Controller {
def index = Action { implicit request =>
...
sql.someSQLHandlerBehaviour()
...
}
}
由于控制器是由 Guice 开箱即用地管理的,因此任何可注入对象也将属于 Guice 生命周期管理的范围。所以你应该能够像上面那样将你的 SqlHandler
注入控制器。
并且由于您的 SqlHandler
现在由 Guice 管理,您可以像这样将 jdbc
依赖项注入 SqlHandler
。
@Singleton
class SqlInjector @Inject() (db: Database) { ... }