【发布时间】:2015-08-19 10:35:25
【问题描述】:
我正在尝试使用 JNDI 资源、休眠和连接池通过 MySQL Fabric 服务器组实现自动故障转移。我们的数据库场已使用 MySQL Fabric 正确设置,我正在尝试实现客户端/连接器。
我在 server.xml 文件中声明了一个 JNDI 资源,它有一个基于 MySQL Fabric 的 URL 和驱动程序,并使用休眠连接池。
<Resource
name="jdbc/myApp"
type="javax.sql.DataSource"
driverClassName="com.mysql.fabric.jdbc.FabricMySQLDriver"
maxWait="1000"
url="proper.fabric.url/fabricServerGroup=myFabricGroup"
maxActive="45"
validationQuery="select 1 from dual"
/>
我遇到的问题是连接池和 Fabric 不能很好地配合使用。取下主数据库后,Fabric 会自动提升一个从属数据库。但是,当我尝试与数据库建立新连接时,我得到了旧的现已失效的连接,最值得注意的是,当我请求读写时,我得到了一个只读连接。作为附加信息,如果我重新启动我的 Tomcat 服务器并要求重新连接,我会得到正确的结果。我遇到的具体问题是由于连接池造成的。
我需要知道的是,我是否缺少一个键/值对,这将使我的 FabricDriver 足够聪明,知道在发生自动故障转移时擦除连接池。
我发现最好的方法是使用 testOnBorrow,不幸的是它只能使用 SELECT 查询(通过 validationQuery),尽管 询问,当我获得只读连接时仍然成功用于读写。
以前有人解决过这个问题吗?
注意:如果我尝试使用 com.mysql.fabric.jdbc.FabricMySQLDataSource,我什至无法成功建立任何连接。常规的 javax.sql.DataSource 似乎是这里的正确值。
第二个注意事项:我使用的是mysql-connector-java 5.1.35版
【问题讨论】:
标签: mysql hibernate jdbc connection-pooling mysql-fabric