Spring跨库事务JOTM
添加配置文件ApplicationContext-jotm.xml到src下:
?
?Userdao2
?
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:ApplicationContext-jotm.xml");// 多库userTest // 库2 userTest2String a="userTest";boolean boo = sid.equals("ku2");if (boo) {a = a+"2";}UserService ut = (UserService) ctx.getBean(a);try {//ut.insertBothDatabase("2", "11111111112222");String s = "111111111122222";if(boo){ut.insert2Database("2", s);// 单独操作数据库2}else{if(sid.equals("asdf")){ut.insertBothDatabase("3", s);}else{// 忘两个数据库插入非法数据,对库1符合要求,库2不符合要求ut.insertBothDatabase("3", s + s );}}//} catch (Exception e) {System.out.println("跨库事务回滚,两个库都未插入数据");} finally {System.out.println("结束");}?WEB服务器是tomcat,一开始我把所有的jotm的jar都放进来啦,但是我发现我一个一个去了之后都丝毫不影响。到spring的jar包一看,spring-tx-2.5.6.jar竟然有支持JTOM的类,org.springframework.transaction.jta.JotmFactoryBean.class 遂恍然大悟,Spring真是强大无比。所以我没有添加任何的其他的jar。两个数据库的表都是xa_test(id,name)不同的是库1的name长度为40,而库2的长度为20. 两个库同事操作的时候如果其中一个库不符合要求,两个库的操作都不执行。这也是所谓的跨库事务。