Использовать 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, который при необходимости избегает их в вашем случае использования.

Другие вопросы по тегам