#java #mysql #ibatis #database-replication #mybatis
#java #mysql #ibatis #репликация базы данных #mybatis
Вопрос:
Мне просто интересно, как я могу использовать базу данных репликации MySQL Master / Slave с MyBatis. JDBC предлагает com.mysql.jdbc.ReplicationDriver
(смотрите Здесь), но я не смог выяснить, где я могу использовать подобные вещи, включая все полезные свойства, которые я могу настроить (roundRobinLoadBalance, автоматическое подключение, …) в MyBatis.
В настоящее время я настроил свою базу данных, не реплицируемую в MyBatis, следующим образом:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/database" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
<environment id="production">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://xxx:3306/database" />
<property name="username" value="production" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
У кого-нибудь есть подсказка для меня?
Спасибо за вашу помощь.
Дэниел
Комментарии:
1. вы пробовали использовать
ReplicationDriver
in<property name="driver">
?
Ответ №1:
ДРУГОЙ ВОЗМОЖНЫЙ ОТВЕТ
Если вы заметили, свойства, которые вы устанавливаете в xml для драйвера, также являются общими свойствами, установленными и переданными в jdbc. Итак, я бы не удивился, если бы MyBatis просто брал их и передавал прямо в драйвер. Так что, возможно, попробуйте это:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- Just use ReplicationDriver -->
<property name="driver" value="com.mysql.jdbc.ReplicationDriver" />
<property name="url"
value="jdbc:mysql://localhost:3306/database" />
<property name="autoReconnect" value="true" />
<property name="roundRobinLoadBalance" value="true" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
<environment id="production">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- Just use ReplicationDriver -->
<property name="driver" value="com.mysql.jdbc.ReplicationDriver" />
<property name="url"
value="jdbc:mysql://xxx:3306/database" />
<property name="autoReconnect" value="true" />
<property name="roundRobinLoadBalance" value="true" />
<property name="username" value="production" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
Комментарии:
1. В качестве URL я также выбрал допустимый URL репликации, и это сработало. Например.
jdbc:mysql:replication://master,slave1,slave2/database
2. Потрясающе. Я рад, что это сработало. Это конкретный URL, который вы использовали? Если это так, я отредактирую свой ответ.
3. Да, с заменой master и slave1 / slave2 на мои URL-адреса. И мне нужно было удалить
<property name="autoReconnect" value="true" />
и<property name="roundRobinLoadBalance" value="true" />
, потому что они не могли быть найдены. Но я попробую, как правильно все настроить.