0

我将 Slick and Play 与 play-slick 插件一起使用,但我无法确定是否可以com.mysql.jdbc.ReplicationDriver与它们一起使用。我想使用该驱动程序的主/从功能。仅使用 Slick 时,似乎就像将驱动程序作为参数传递给 " forUrl" 方法一样简单,但 play-slick 创建其连接的方式不同。我已经通过源代码试图弄清楚发生了什么,但我发现是空的。有人知道这是否可以做到吗?

PS:这是我目前的配置:

db.default.url="jdbc:mysql:replication://master,slave/production?autoReconnectForPools=true&roundRobinLoadBalance=true&loadBalanceBlacklistTimeout=1000&readOnly=true"
db.default.driver=com.mysql.jdbc.ReplicationDriver
db.default.slickdriver=scala.slick.driver.MySQLDriver
db.default.user=root
db.default.password=""

当我查看 Slick 源代码时,它的驱动程序似乎只是定义了如何构造数据和查询,并且没有包含任何有关实际连接的内容,所以我假设我能够告诉 play-slick 使用该驱动程序来实现 slick和 JDBC 的复制驱动程序

更新:所以上面的配置实际上似乎使用了正确的驱动程序,问题是我需要申请Connection.readOnly(true)发生的每个数据库操作,如here所述。我不确定 Play 如何管理其连接,有没有办法可以做到这一点?

更新 2所以我在播放框架的源代码中找到了它获取 JDBC 连接的位置,但我不确定如何向该进程添加任何内容。我是否必须分叉整个框架才能完成此任务,还是有更明智的方法来做到这一点?

4

1 回答 1

0

您可以扩展 SlickMySQLDriver并覆盖createSession包含的内容val Database以始终在连接上调用 readOnly。如果您不习惯 Scala 中的嵌套特征和潜在的初始化顺序问题,这可能会有点棘手。如有必要,请随时向 Slick 提交 PR,以避免在您的用例中使用它们。

于 2014-04-22T11:50:02.810 回答