使用Slick / Play的MySQL复制驱动程序

时间:2014-04-19 00:27:43

标签: playframework slick play-slick

我正在使用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使用它光滑的驱动程序和JDBC的复制驱动程序

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

更新2 所以我找到了here,但我不确定如何在该流程中添加任何内容。我是否必须分叉整个框架才能实现这一目标,还是有更明智的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以扩展Slick的MySQLDriver并覆盖包含createSession的{​​{1}},以便始终在连接上调用readOnly。如果您不习惯Scala中的嵌套特征和潜在的init顺序问题,这可能有点棘手。如果有必要,请随意向Slick提交PR,以避免使用它们。