hibernate多服务器间数据同步[Java编程]
本文“hibernate多服务器间数据同步[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
需求功效介绍:
为性能考虑,单一服务器改成集群(每太服务器数据答应在一按时间内保持相步),给出的改正时间短,不过代码长期层对比统一(hibernate 感激天还好是她! ).网络衔接不安定(铁路内网!).
完成后效果:
当网络衔接成功时,大都据库的同步.
当网络衔接失利时,本地利用程序应用hibernate拦阻器拦阻正操作对象并记录下操作行动,序列化到本地局势库 z_jcyy_tb 表中.表数据属性为:id,inputdate(记录时间),object(序列对象),action(操作行动).并安一按时间测试衔接.假如成功,读取 z_jcyy_tb 表中数据 反序列化 再同步到 其他数据库中.
代码阐明:
1.新Session 成立
hibernate.cfg.xml 在文件<session-factory>中增添
<property name="connection.url_b">jdbc:oracle:thin:@192.168.1.114:1521:JCYY</property>
<property name="connection.username_b">jcyy</property>
<property name="connection.password_b">jcyy</property>
TBDao -> OpenSession()
private static String url_b = null ;
private static String use_b = null ;
private static String pass_b = null ;
private static String dirver_b = null ;
static {try {
//获得hibernate.cfg.xml逻辑途径,和本来程序关联上
Field field = SessionManager.class.getDeclaredField("CONFIG_FILE_LOCATION");
field.setAccessible( true );
String path = (String) field.get(SessionManager. class );
//通过 dom4j 加载 配置文件
Document docT = new SAXReader().read( TBDao.class.getResourceAsStream(path) );
//正则+xpath读取 在hbn文件中加入的<property name="..._b"> 的属性
String xpath = "/hibernate-configuration/session-factory/property[@name='XPATH_I']" ;
Pattern p = Pattern.compile("(XPATH_I)");
Matcher ma = p.matcher(xpath);
url_b = DocumentHelper.createXPath( ma.replaceAll("connection.url_b") ).selectSingleNode(docT).getText();
use_b = DocumentHelper.createXPath( ma.replaceAll("connection.username_b")).selectSingleNode(docT).getText();
pass_b = DocumentHelper.createXPath( ma.replaceAll("connection.password_b")).selectSingleNode(docT).getText();
dirver_b = DocumentHelper.createXPath( ma.replaceAll("connection.driver_class")).selectSingleNode(docT).getText();
} catch (Exception e) {e.printStackTrace();}}
//操纵hbn的SessionFactory得到 openSession(Connection); 翻开异地数据库衔接.
//操纵私有反射得到 加载完成的SessionFactory
public Session openSessionb(){
try {
Class.forName(dirver_b);
Connection conn = DriverManager.getConnection(url_b,use_b,pass_b);
Field[] fields = SessionManager.class.getDeclaredFields();
Field field = null ;
for(int i=0;i<fields.length;i++){
if( SessionFactory.class.equals( fields[i].getType() ) )
field = fields[i];
}
field.setAccessible(true);
SessionFactory sessionFactory = (SessionFactory) field.get(SessionManager.class );
return sessionFactory.openSession(conn);
} catch (Exception e) {
System.out.println("--没有衔接到总服务(openSessionb)--");
return null ;
}
}
以上是“hibernate多服务器间数据同步[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |