今天,由于主数据库服务器在没有任何通知的情况下发生故障,我遇到了停机时间.
那么,这是你应该修复的第一件事(通过适当的监控).
(...)是否存在一种方法,我可以利用hibernate库来启用此功能?
据我所知,Hibernate并没有为此提供任何便利.就个人而言,我会调查MySQL及其JDBC驱动程序的故障转移支持.我无法提供一个非常具体的答案,因为我没有用MySQL实现这个,但这里有一些指示:
并且,如上面最新链接(以及此评论)底部所述:
您可能还需要研究负载平衡JDBC池(lbpol)工具,该工具提供标准JDBC驱动程序的包装,并允许您使用包括检查系统故障和不均匀负载分布的数据库连接池.有关更多信息,请参阅负载平衡JDBC池(lbpool).
在从这个线程中得到一个想法后,我创建了以下类, 它似乎运行良好。我不知道这是否是一个好方法。
package com.vsd.server.hibernate;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.lang.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.connection.C3P0ConnectionProvider;
public class FailoverConnectionProvider extends C3P0ConnectionProvider {
String password;
String username;
String connectionString;
String failover_connstring;
@Override
public Connection getConnection() throws SQLException {
Connection conn = null;
try {
conn = DriverManager.getConnection(connectionString, username, password);
} catch (Exception ex) {
conn = DriverManager.getConnection(failover_connstring, username, password);
}
if(conn == null){
throw new IllegalStateException("Database connection was not initialized");
}
return conn;
}
@Override
public void configure(Properties properties) throws HibernateException {
failover_connstring = properties.getProperty("hibernate.connection.failover.url");
if (StringUtils.isBlank(connectionString)
&& StringUtils.isBlank(failover_connstring)
&& StringUtils.isBlank(username)
&& StringUtils.isBlank(password)) {
throw new IllegalStateException("Unable to initialize connection provider for hibernate");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6777 次 |
| 最近记录: |