Использовать MySQL Replication Driver с Slick/Play
Я использую 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)
для каждой операции базы данных, которая происходит, как описано здесь. Я не уверен, как Play управляет своими соединениями, есть ли способ, которым я могу это сделать?
Обновление 2 Итак, я нашел место в исходном тексте фреймворка Play, где он получает JDBC-соединения, но я не уверен, что нужно добавить в этот процесс. Придется ли мне раскошелиться на весь фреймворк, чтобы сделать это, или есть более разумный способ сделать это?
1 ответ
Вы можете быть в состоянии продлить Slick's MySQLDriver
и переопределить createSession
из содержащихся val Database
всегда вызывать readOnly для соединения. Это может быть немного сложно, если вы не привыкли к вложенным чертам в Scala и потенциальным проблемам порядка инициализации. Не стесняйтесь подавать PR в Slick, который при необходимости избегает их в вашем случае использования.