多数据源 更新 spring jta java jotm
代码下载 :http://download.csdn.net/download/knight_black_bob/8816323
对比 下面的 多数据库操作 http://knight-black-bob.iteye.com/blog/2212872
大家 可以 感受一下 优缺点………
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" default-autowire="byName" > <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="classpath:db-config.properties"></property> </bean> <!-- 引用Spring内部所提供的对JOTM支持的工厂类 --> <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" /> <!-- 配置JTA事务管理器, 并在管理器中使用上面所配置的JOTM --> <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction" ref="jotm" /> </bean> <!-- 配置多个数据源 --> <!--第一个数据源,采用XAPool链接池--> <bean id="dataSourceA" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm" /> <property name="driverName" value="${driverClassName}" /> <property name="url" value="${url1}" /> </bean> </property> <property name="user" value="${username1}" /> <property name="password" value="${password1}" /> </bean> <!--第二个数据源,采用XAPool链接池--> <bean id="dataSourceB" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm" /> <property name="driverName" value="${driverClassName}" /> <property name="url" value="${url2}" /> </bean> </property> <property name="user" value="${username2}" /> <property name="password" value="${password2}" /> </bean> <!-- 根据不同的数据源配置两个jdbcTemplate --> <bean id="jdbcTemplateA" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSourceA" /> </bean> <bean id="jdbcTemplateB" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSourceB" /> </bean> <!-- JTA事务传播特性 --> <tx:advice id="txAdviceJTA" transaction-manager="txManager"> <tx:attributes> <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="create*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="del*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <aop:config> <aop:advisor pointcut="execution(* com.baoy.service..*(..))" advice-ref="txAdviceJTA" /> </aop:config> </beans>
applicationContext-dao.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" default-autowire="byName" > <bean id="userDao" class="com.baoy.daoImpl.UserDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplateA" /> </bean> <bean id="providerDao" class="com.baoy.daoImpl.ProviderDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplateB" /> </bean> </beans>
applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" default-autowire="byName" > <bean id="userService" class="com.baoy.serviceImpl.UserServiceImpl"></bean> </beans>
applicationContext-action.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" default-autowire="byName" > <bean id="userAction" class="com.baoy.action.UserAction" scope="prototype"></bean> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>/common/index.jsp</welcome-file> </welcome-file-list> </web-app>
package com.baoy.action; import com.baoy.base.action.BaseAction; import com.baoy.bean.User; import com.baoy.service.UserService; public class UserAction extends BaseAction{ private UserService userService; public String doRegister(){ User user = new User(); user.setUserid(888888); user.setUsername(888888+""); user.setUserpswd(888888+""); user.setNickname(888888+""); user.setContacts(888888+"") ; user.setTelephone(888888+""); user.setProvinceid(888888); user.setEnterprise(888888+""); user.setRegtime("2015-02-17 16:49:00"); user.setRoleid(1); user.setSpid(888888+""); user.setSpkey(888888+""); userService.regist(user); return "success"; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } }
package com.baoy.bean; public class Provider { //spid,spkey,user_id,company,address,province_code,insert_time private String spid; // '厂商ID', private String spkey; //'厂商密钥', private int userId ; //'用户名', private String company; //'厂商名称', private String address; // '厂商地址', private int provinceCode; // '所在省份,外键', private String insertTime; @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append (getClass().getName().substring(getClass().getName().lastIndexOf(".")+1, getClass().getName().length())); sb.append(":["); sb.append("\"spid\":\"" +spid+"\"," ); sb.append("\"spkey\":\"" +spkey+"\"," ); sb.append("\"userId\":\"" +userId+"\"," ); sb.append("\"company\":\"" +company+"\"" ); sb.append("\"address\":\"" +address+"\"," ); sb.append("\"provinceCode\":\"" +provinceCode+"\"," ); sb.append("\"insertTime\":\"" +insertTime+"\"" ); sb.append("]"); return sb.toString() ; } public String getSpid() { return spid; } public void setSpid(String spid) { this.spid = spid; } public String getSpkey() { return spkey; } public void setSpkey(String spkey) { this.spkey = spkey; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getProvinceCode() { return provinceCode; } public void setProvinceCode(int provinceCode) { this.provinceCode = provinceCode; } public String getInsertTime() { return insertTime; } public void setInsertTime(String insertTime) { this.insertTime = insertTime; } }
package com.baoy.bean; public class User { //userid,username,userpswd,nickname,contacts,telephone,enterprise,regtime,provinceid,roleid,spid,spkey private int userid; private String username; private String userpswd; private String nickname; private String contacts; private String telephone; private String enterprise; private int provinceid; private String regtime; private int roleid; private String spid; private String spkey; @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append (getClass().getName().substring(getClass().getName().lastIndexOf(".")+1, getClass().getName().length())); sb.append(":["); sb.append("\"userid\":\"" +userid+"\"," ); sb.append("\"username\":\"" +username+"\"," ); sb.append("\"userpswd\":\"" +userpswd+"\"," ); sb.append("\"nickname\":\"" +nickname+"\"" ); sb.append("\"contacts\":\"" +contacts+"\"," ); sb.append("\"telephone\":\"" +telephone+"\"," ); sb.append("\"enterprise\":\"" +enterprise+"\"," ); sb.append("\"provinceid\":\"" +provinceid+"\"" ); sb.append("\"regtime\":\"" +regtime+"\"," ); sb.append("\"roleid\":\"" +roleid+"\"," ); sb.append("\"spid\":\"" +spid+"\"," ); sb.append("\"spkey\":\"" +spkey+"\"" ); sb.append("]"); return sb.toString() ; } public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getUserpswd() { return userpswd; } public void setUserpswd(String userpswd) { this.userpswd = userpswd; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getContacts() { return contacts; } public void setContacts(String contacts) { this.contacts = contacts; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getEnterprise() { return enterprise; } public void setEnterprise(String enterprise) { this.enterprise = enterprise; } public int getProvinceid() { return provinceid; } public void setProvinceid(int provinceid) { this.provinceid = provinceid; } public String getRegtime() { return regtime; } public void setRegtime(String regtime) { this.regtime = regtime; } public int getRoleid() { return roleid; } public void setRoleid(int roleid) { this.roleid = roleid; } public String getSpid() { return spid; } public void setSpid(String spid) { this.spid = spid; } public String getSpkey() { return spkey; } public void setSpkey(String spkey) { this.spkey = spkey; } }
package com.baoy.daoImpl; import org.springframework.jdbc.core.support.JdbcDaoSupport; import com.baoy.bean.Provider; import com.baoy.dao.ProviderDao; public class ProviderDaoImpl extends JdbcDaoSupport implements ProviderDao{ @Override public int saveProvider(Provider provider) { String sql = "insert into provider(spid,spkey,user_id,company,address,province_code,insert_time) values (?,?,?,?,?,?,?)"; return this.getJdbcTemplate().update(sql,new Object[] {provider.getSpid(),provider.getSpkey(),provider.getUserId(),provider.getCompany(),provider.getAddress(),provider.getProvinceCode(),provider.getInsertTime()}); } }
package com.baoy.daoImpl; import org.springframework.jdbc.core.support.JdbcDaoSupport; import com.baoy.bean.User; import com.baoy.dao.UserDao; public class UserDaoImpl extends JdbcDaoSupport implements UserDao{ @Override public int saveUser(User user) { String sql = "insert into user(userid,username,userpswd,nickname,contacts,telephone,enterprise,regtime,provinceid,roleid,spid,spkey) values (?,?,?,?,?,?,?,?,?,?,?,?)"; return this.getJdbcTemplate().update(sql, new Object[] {user.getUserid(), user.getUsername(), user.getUserpswd(), user.getNickname(), user.getContacts() , user.getTelephone(), user.getEnterprise(), user.getRegtime(), user.getProvinceid(), user.getRoleid(), user.getSpid(), user.getSpkey()}); } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
本文将深入探讨如何使用Spring、Java Transaction API (JTA) 和 Java Object Transaction Manager (JOTM) 实现多数据源更新的解决方案。 首先,让我们理解什么是多数据源。在传统的单数据源环境中,应用程序通常...
JTA是Java EE平台的一部分,提供了一种标准接口来管理和协调跨多个数据源的事务。它允许应用程序进行全局事务处理,即使这些操作涉及到不同的数据库或者其他资源管理器。 在Spring中,我们可以利用`...
JTA是Java平台的标准事务API,它允许应用程序进行跨多个数据源(如数据库或消息队列)的全局事务处理。通过JTA,开发者可以编写不关心具体事务管理细节的代码,这样就提高了代码的可移植性和可维护性。 JOTM则是JTA...
本篇文章将聚焦于如何结合Spring和JOTM(Java Open Transaction Manager)来实现多数据源的事务管理,特别是针对使用Hibernate的情况。 JOTM是Java平台上的一个开放源代码事务管理器,它遵循JTA(Java Transaction ...
1.多数据源配置,采用方式:直接配置两个不同的数据源,不同的sessionFactory。 2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元...
在分布式系统中,JTA(Java Transaction API)事务管理用于处理跨越多个数据源的事务,如数据库、消息队列等。JOTM(Java Open Transaction Manager)是一个开源的JTA事务管理器,可以在非J2EE环境下提供分布式事务...
在Spring中,通过集成JOTM,可以实现全局的事务控制,确保在多资源操作中保持数据的一致性。 **集成步骤**: 1. **添加依赖**:首先,项目需要在构建配置(如pom.xml或build.gradle)中引入Spring 3.0.5和JOTM的...
在本篇文章中,我们将深入探讨如何利用Spring框架结合JOTM(Java Open Transaction Manager)来实现多数据源下的分布式事务管理。我们将通过具体实例展示如何在Tomcat服务器环境下配置并使用这些技术。 #### 一、...
JOTM是Java事务API(JTA)的一个开源实现,用于管理跨多个资源(如数据库和消息队列)的分布式事务。在Spring中,JOTM可以作为全局事务管理器,处理跨越不同数据源的事务。当应用程序需要在多个数据库或者服务之间...
在Spring框架中,JTA(Java Transaction API)事务管理是一种用于处理分布式事务的高级机制,它允许应用程序在多个数据源之间进行协调的事务操作。本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM...
JOTM作为JTA的一个实现,允许开发者在分布式环境中处理多数据源的事务,确保数据的一致性和完整性。 分布式事务的主要挑战在于保持ACID(原子性、一致性、隔离性和持久性)属性,即使在系统故障或网络中断的情况下...
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
### Spring多数据源配置与分布式数据管理 #### 环境及框架介绍 在本案例中,我们将探讨如何在基于Tomcat服务器的环境下配置多个数据源,并实现分布式数据的交互。该系统的架构主要包括:Tomcat作为应用服务器,...
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...
本DEMO主要展示了如何在Spring框架中结合JOTM来处理分布式事务,特别是涉及多个数据源的情况。 首先,我们需要理解JOTM的基本概念。JOTM作为一个事务协调者,负责管理跨多个资源的事务,确保它们要么全部成功,要么...
1. Spring配置文件(如`applicationContext.xml`):配置Atomikos事务管理器和数据源。 2. 业务服务类:使用`@Transactional`注解的方法,展示事务的边界。 3. 数据库配置和实体类:与事务相关的数据库连接和数据...
JTA是Java平台标准的一部分,定义了API来管理和协调跨多个数据源的事务。它提供了一种统一的方式来处理应用程序中的事务,无论这些数据源是数据库、消息队列还是其他服务。JTS则是JTA的一个扩展,主要用于J2EE环境中...