【发布时间】:2014-11-18 01:10:22
【问题描述】:
我正在运行一个使用 squeryl 和 mysql 数据库的游戏框架网站。 我需要使用 squeryl 来运行对从属设备的所有读取查询和对主设备的所有写入查询。
我怎样才能做到这一点?通过 squeryl 或通过 jdbc 连接器本身。
非常感谢,
【问题讨论】:
标签: scala playframework master-slave squeryl
我正在运行一个使用 squeryl 和 mysql 数据库的游戏框架网站。 我需要使用 squeryl 来运行对从属设备的所有读取查询和对主设备的所有写入查询。
我怎样才能做到这一点?通过 squeryl 或通过 jdbc 连接器本身。
非常感谢,
【问题讨论】:
标签: scala playframework master-slave squeryl
我自己不倾向于使用 MySQL,但这里有一个想法:
根据文档here,如果在 Connnection 上正确设置了 readOnly 属性,MySQL JDBC 驱动程序将在从属设备之间循环。为了检索和更改当前连接,您需要使用类似
的代码transaction {
val conn = Session.currentSession.connection
conn.setReadOnly(true)
//Your code here
}
更好的是,您可以创建自己的 readOnlyTransaction 方法:
def readOnlyTransaction(f: => Unit) = {
transaction {
val conn = Session.currentSession.connection
val orig = conn.getReadOnly()
conn.setReadOnly(true)
f
conn.setReadOnly(orig)
}
}
然后像这样使用它:
readOnlyTransaction {
//Your code here
}
您可能需要稍微清理一下,以便在发生异常时重置默认只读状态,但您大致了解。
【讨论】: