2014-04-19 19 views
0

我正在使用Slick和Play一起使用play-slick插件,我無法弄清楚我是否可以使用com.mysql.jdbc.ReplicationDriver。我想使用該驅動程序的主/從功能。僅在使用Slick時,它看起來就像將驅動程序作爲參數傳遞給「forUrl」方法一樣簡單,但play-slick創建其連接的方式不同。我已經通過消息來源去了解發生了什麼,但是我已經空了。有誰知道這是否可以完成?在Slick/Play中使用MySQL複製驅動程序

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="" 

當我看着通過油滑源及其驅動程序似乎只是定義瞭如何構建數據和查詢,並沒有包括有關實際連接東西,所以我有點認爲我可以告訴玩家爽快地使用該驅動程序的光滑和JDBC的複製驅動程序

更新:所以事實證明,上述配置實際上似乎使用正確驅動程序,問題是我需要申請Connection.readOnly(true)爲每個數據庫操作發生,如解釋here。我不確定Play如何管理它的連接,有沒有辦法可以做到這一點?

更新2所以我找到了spot in the play framework's source where it gets JDBC connections,但我不知道如何去添加任何東西到該過程。我是否必須分叉整個框架才能實現這個目標?還是有更合理的方法來完成這個任務?

回答

0

您可以延長油滑的MySQLDriver和覆蓋包含val DatabasecreateSession總是叫readOnly的連接上。如果你不習慣在Scala中嵌套特徵和潛在的init命令問題,這可能有點棘手。如果有必要,請隨時將PR提交給Slick,以避免使用它們。

+0

如果您只是手動創建數據源和數據庫,那麼問題是什麼?實際上,play-slick處理的是在哪個上下文/線程池中調用數據庫?如果我只是有一個val ds = datasource會有性能問題嗎? – loyalflow