经过一番研究,我回到了已经在 MySQL Connector/J 中实现的解决方案。对 context.xml 文件的 Resource 进行了相当简单的更改,driverClassName
例如:url
<Resource name="jdbc/my_db"
auth="Container"
type="javax.sql.DataSource"
username="db_user"
password="db_password"
driverClassName="com.mysql.jdbc.ReplicationDriver"
url="jdbc:mysql:replication://192.168.100.51:3306,192.168.100.52:3306/my_schema"
maxActive="200"
maxIdle="100"
maxWait="20000"
initialSize="20"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
/>
效果很好。无论您拥有多少副本,url 的顺序都是 master/replica/replica/...。然后,您可以将 Connection 实例设置为 setReadOnly(true) 以从其中一个副本读取,或将 setReadOnly(false) 设置为从主服务器读取。显然副本之间的负载平衡由驱动程序处理,但由于只有一个副本,我无法确认。
文档中更好地描述了所有内容:
https ://dev.mysql.com/doc/refman/5.6/en/connector-j-reference-replication-connection.html