Replication-AwareなConnection
ちょっと前の情報だけど,Java+MySQLレプリケーションを使っている人に朗報.
Connector/J 3.1.5から"Replication-Aware"なConnectionというのが実装された.この機能が提供される前はおそらく開発者自身が2つのデータソースを使い分けないとmaster/slaveを負荷分散目的での使い分けができなかったと思うのだけれども,これによってかなり透過的にそれを行うことができるようになる.
簡単に言うと,この新しいタイプのConnectionはmaster+slave*nのデータソースを1つにまとめて使いたい人向けのラッパーのようなもの.
使う上でのポイントは以下.
- Driverクラスとして"com.mysql.jdbc.Driver"ではなく"com.mysql.jdbc.ReplicationDriver"を使う
- JDBC接続URLのところで接続先を指定する際に(MySQL Clusterの時と同じように),カンマでホスト名を区切って列挙する.ただしmasterが1番目,slaveは2番目以降に書く.例:"jdbc:mysql://master,slave1,slave2,slave3/test"
- プロパティ autoReconnect=true を設定
- プロパティ roundRobinLoadBalance=true を設定
- 読み込み専用トランザクションの場合,Connection.setReadOnly(true)を呼んでから処理を実行する.
- 書き込みのあるトランザクションの場合,Connection.setReadOnly(false)を呼んでから処理を実行する.
- MySQLのレプリケーションは非同期なので書き込み直後のデータも絶対読みたい場合にはConnection.setReadOnly(false)を選択.