我希望获得与我在 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将其注入其他地方?
答案 0 :(得分:0)
此答案假设您要将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) { ... }