Использование репликации MySQL (Master / Slave) с MyBatis

#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" /> , потому что они не могли быть найдены. Но я попробую, как правильно все настроить.