我想获得与我在写入时定义的数据库实例的连接应用程序配置文件:
db.default {
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
username = ...
password = ...
}
The docs https://www.playframework.com/documentation/2.5.x/ScalaDatabase#Obtaining-a-JDBC-connection说我们应该注入db: Database
进入控制器(工作正常),并且别无他法。预定义的 Guice 注入是隐藏的(不在模块.scala)。它还表明 Play 自动创建默认的数据库单例。
如果我不想将数据库注入控制器,而是单独关注并仅在某些情况下使用它,该怎么办?SqlHandler
唯一的工作是执行 SQL 查询的对象:
object SqlHandler {
val db: Database = ???
def select(params) {...db...}
def insert(params) {...db...}
}
我知道我可以创建一个新的数据库实例play.api.db.Databases https://www.playframework.com/documentation/2.5.x/api/scala/index.html#play.api.db.Databases%24与类似的东西
import play.api.db.Databases
val db: Database = Databases(
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
username = ...
password = ...
)
但我不仅发现重复所有信息很愚蠢,而且我相信它还会创建数据库两次(一次自动,一次手动,不是吗?)。
是否有任何方便的方法来获取与我的默认数据库的连接,或者how我可以使用 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) { ... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)