Spec-Zone .ru
спецификации, руководства, описания, API

22.3.5.7. Используя Основную/Ведомую Репликацию с ReplicationConnection

Connector/J 3.1.7 и выше включает разновидность драйвера, который автоматически отправит запросы ведущему устройству чтения-записи, или failover или круговой loadbalanced набор ведомых устройств, основанных на состоянии Connection.getReadOnly().

Приложение сигнализирует, что хочет, чтобы транзакция была только для чтения, вызывая Connection.setReadOnly(true), это осведомленное о репликации соединение будет использовать одно из ведомых соединений, которые сбалансированы с загрузки на - vm использование круговой схемы (данное соединение является липким к ведомому устройству, если то ведомое устройство не удаляется из службы). Если у Вас есть транзакция записи, или если у Вас есть чтение, которое чувствительно ко времени (помните, репликация в MySQL является асинхронной), установите соединение, чтобы быть не только для чтения, вызывая Connection.setReadOnly(false) и драйвер гарантирует, что дальнейшие вызовы отправляются основному серверу MySQL. Драйвер заботится о распространении текущего состояния автоматической фиксации, уровня изоляции, и каталога между всеми соединениями, которые это использует, чтобы выполнить эту функциональность выравнивания нагрузки.

Чтобы добавить эту функциональность, используйте com.mysql.jdbc.ReplicationDriver class, конфигурируя пул соединения Вашего сервера приложений или создавая экземпляр драйвера JDBC для Вашего автономного приложения. Поскольку это принимает тот же самый формат URL как стандартный драйвер MySQL JDBC, ReplicationDriver в настоящий момент не работает с java.sql.DriverManagerНа основе создание соединения, если это не единственный драйвер MySQL JDBC, зарегистрированный в DriverManager .

Вот короткий пример как ReplicationDriver мог бы использоваться в автономном приложении:

import java.sql.Connection;import java.sql.ResultSet;import java.util.Properties;import com.mysql.jdbc.ReplicationDriver;public class ReplicationDriverDemo {  public static void main(String[] args) throws Exception {    ReplicationDriver driver = new ReplicationDriver();    Properties props = new Properties();    // We want this for failover on the slaves    props.put("autoReconnect", "true");    // We want to load balance between the slaves    props.put("roundRobinLoadBalance", "true");    props.put("user", "foo");    props.put("password", "bar");    //    // Looks like a normal MySQL JDBC url, with a    // comma-separated list of hosts, the first    // being the 'master', the rest being any number    // of slaves that the driver will load balance against    //    Connection conn =        driver.connect("jdbc:mysql:replication://master,slave1,slave2,slave3/test",            props);    //    // Perform read/write work on the master    // by setting the read-only flag to "false"    //    conn.setReadOnly(false);    conn.setAutoCommit(false);    conn.createStatement().executeUpdate("UPDATE some_table ....");    conn.commit();    //    // Now, do a query from a slave, the driver automatically picks one    // from the list    //    conn.setReadOnly(true);    ResultSet rs =      conn.createStatement().executeQuery("SELECT a,b FROM alt_table");     .......  }}

Считайте исследование Выравнивания нагрузки Пулом JDBC (lbpool) инструмент, который обеспечивает обертку вокруг стандартного драйвера JDBC и позволяет Вам использовать пулы соединения DB, который включает проверки на системные отказы и неравное распределение нагрузки. Для получения дополнительной информации см. Выравнивание нагрузки Пул JDBC (lbpool).