我有一个在Jboss AS 4.2.3上运行的j2EE应用程序,并且对mysql数据库有很多读取。
我想设置几个mysql实例,因此应用程序将能够决定联系哪个。 我们使用Hibernate作为ORM(完整的JPA支持)。
我一直在关注Hibernate Shards和OpenJPA - 但也许有另一种方法可以做到这一点?
有没有办法我们仍然可以使用JPA(所以我们不需要更改我们的代码)并将某种读取平衡作为提供者?
我可以在主机文件上提取一些技巧,使用短TTL的DNS - 但我正在寻找一个更简单的解决方案。
有一个吗?
只是为了确保,此时分片不是很有趣。只是阅读。
答案 0 :(得分:0)
所以我最终做的是扩展mysql jdbc驱动程序并修改mysql-ds.xml文件。
在xml文件中,我将连接字符串更改为包含多个主机,并将:mysql:to:myjdbc:,并作为提供者输入我的类。
在扩展的JDBC驱动程序中我必须在两个函数中解析连接字符串: 1. acceptedURL 2.连接
我的代码解析连接字符串,随机选择一台机器,并使用修改后的合法连接字符串调用超级函数。
它刚刚起作用! 如果mysql只读副本失败,则连接失败,并在下次尝试时选择另一台机器。
whooohooo!
你有什么意见吗?