`
wu_quanyin
  • 浏览: 208265 次
  • 性别: Icon_minigender_1
  • 来自: 福建省
社区版块
存档分类
最新评论

Spring---多个数据库的事务操作配置(JNDI)

阅读更多

一,当有记录需要操作两个以上数据库时,这时就会引发事务问题,,,jndi能解决此类问题

context.xml

<Context path="/spring-all" docBase="spring-all" debug="5" reloadable="true"
	crossContext="true">

	<Resource name="jdbc/mysql" auth="Container"
		type="javax.sql.DataSource" maxActive="100" maxIdle="50"
		maxWait="10000" 
		driverClassName="com.mysql.jdbc.Driver"
		url="jdbc:mysql://127.0.0.1:3306/orange1"
		username="root"
		password="kgddxsksk"
		testOnBorrow="true" testWhileIdle="true"/>	
		
		<Resource name="jdbc/sqlserver" auth="Container"
		type="javax.sql.DataSource" maxActive="100" maxIdle="50"
		maxWait="10000" 
		driverClassName="net.sourceforge.jtds.jdbc.Driver"
		url="jdbc:jtds:sqlserver://192.168.7.83:1433/test"
		username="sa"
		password="kgddxsksk"
		testOnBorrow="true" testWhileIdle="true"/>	
</Context>

 

二,spring中的事务配置

 

<?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"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xsi:schemaLocation="
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
     http://www.springframework.org/schema/jee 
     http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">

	<!-- 
		<bean id="dataSource1"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName">
		<value>com.mysql.jdbc.Driver</value>
		</property>
		<property name="url">
		<value>jdbc:mysql://127.0.0.1:3306/orange1</value>
		</property>
		<property name="username">
		<value>root</value>
		</property>
		<property name="password">
		<value>kgddxsksk</value>
		</property>
		</bean>
		
	-->
	<jee:jndi-lookup id="dataSource1"
		jndi-name="java:/comp/env/jdbc/mysql">
	</jee:jndi-lookup>
	
	<jee:jndi-lookup id="dataSource2"
		jndi-name="java:/comp/env/jdbc/sqlserver">
	</jee:jndi-lookup>
	
	<bean id="jotm"
		class="com.spring.web.controller.JotmFactoryBean" />
	<!-- 
		当使用jta时,说明使用隔离级别
	-->
	<bean id="txManager"
		class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="allowCustomIsolationLevels" value="true" />
		<property name="userTransaction">
			<ref local="jotm" />
		</property>
	</bean>

	<!-- "person" table in mysql and "user" table in sqlserver -->
	<bean id="person" class="com.spring.web.model.Person"></bean>
	<bean id="personDao" class="com.spring.web.dao.PersonDao">
		<property name="dataSource" ref="dataSource1"></property>
	</bean>
	<bean id="user" class="com.spring.web.model.User"></bean>
	<bean id="userDao" class="com.spring.web.dao.UserDao">
		<property name="dataSource" ref="dataSource2"></property>
	</bean>

	<bean id="userService"
		class="com.spring.web.services.UserService">
		<property name="userDao" ref="userDao"></property>
		<property name="personDao" ref="personDao"></property>
	</bean>

	<!-- 事务配置 -->
	<!-- 非检查型(RuntimeException)默认才会回滚 -->
	<!-- 
		对txManager进行了事务控制,,,所以在代码中使用持久化api时,也要是定制的,如
		JdbcTemplate、HibernateTemplate和JdoTemplate,,,也可用相应的
		DataSourceUtils(针对JDBC),SessionFactoryUtils(针对Hibernate),PersistenceManagerFactoryUtils(针对JDO)
		因为这些类都会引用manager中的事务
	-->
	<tx:annotation-driven transaction-manager="txManager" />
	<!-- the transactional advice (what 'happens'; see the <aop:advisor/> bean below) -->
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<!-- the transactional semantics... -->
		<tx:attributes >
			<!-- propagation  只有在嵌套事务(service调用了service里面的方法)存在时,几种机制才有意义 -->
			<tx:method name="insert*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
		</tx:attributes>
	</tx:advice>

	<!-- ensure that the above transactional advice runs for any execution
		of an operation defined by the Service interface -->
	<aop:config>
		<aop:pointcut id="daoOperation"
			expression="execution (* com.spring.web.services.*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="daoOperation" />
	</aop:config>


</beans>

 

 

JotmFactoryBean在新版本中已实移除,需自己加入才可以.

public class JotmFactoryBean implements FactoryBean, DisposableBean {

	private Current jotmCurrent;

	private Jotm jotm;


	public JotmFactoryBean() throws NamingException {
		// Check for already active JOTM instance.
		this.jotmCurrent = Current.getCurrent();

		// If none found, create new local JOTM instance.
		if (this.jotmCurrent == null) {
			// Only for use within the current Spring context:
			// local, not bound to registry.
			this.jotm = new Jotm(true, false);
			this.jotmCurrent = Current.getCurrent();
		}
	}

	/**
	 * Set the default transaction timeout for the JOTM instance.
	 * <p>Should only be called for a local JOTM instance,
	 * not when accessing an existing (shared) JOTM instance.
	 */
	public void setDefaultTimeout(int defaultTimeout) {
		this.jotmCurrent.setDefaultTimeout(defaultTimeout);
	}

	/**
	 * Return the JOTM instance created by this factory bean, if any.
	 * Will be <code>null</code> if an already active JOTM instance is used.
	 * <p>Application code should never need to access this.
	 */
	public Jotm getJotm() {
		return this.jotm;
	}


	public Object getObject() {
		return this.jotmCurrent;
	}

	public Class getObjectType() {
		return this.jotmCurrent.getClass();
	}

	public boolean isSingleton() {
		return true;
	}


	/**
	 * Stop the local JOTM instance, if created by this FactoryBean.
	 */
	public void destroy() {
		if (this.jotm != null) {
			this.jotm.stop();
		}
	}

}

 还得加入jotm中相应的一些包..http://androidguy.blog.51cto.com/974126/216454

carol.jar

carol-iiop-delegate.jar

carol-interceptors.jar

howl.jar

jotm.jar

xapool.jar

 

0
1
分享到:
评论

相关推荐

    dynamic-datasource-spring-boot-starter-v3.5.1.zip

    支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 支持 自定义注解 ,需继承DS(3.2.0+)。 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速...

    spring-framework-4.3.30.RELEASE-schema.zip

    本压缩包"spring-framework-4.3.30.RELEASE-schema.zip"正是这一版本的Spring Framework源码与相关配置文件集合,它涵盖了多个模块,为开发高效、稳定的应用提供了全面支持。 首先,我们关注到"mvc"子目录,这是...

    如何在spring中等价配置得到原本由jndi配置实现的数据源

    通常,在Web应用程序中,数据源常常通过Java Naming and Directory Interface (JNDI)进行管理,这允许多个应用共享同一个数据源,例如在应用服务器如Tomcat、JBoss或WebLogic中。然而,有时我们可能希望在非Web环境...

    dynamic-datasource-spring-boot-starter-v3.5.1.tar.gz

    支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 支持 自定义注解 ,需继承DS(3.2.0+)。 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速...

    dynamic-datasource-spring-boot-starter:springboot的动态数据源多数据源动态数据源主从分离读写分离分布式事务https:dynamic-datasource.com

    支持每个数据库独立初始化表结构schema和数据库数据库。支持自定义注解,需继承DS(3.2.0+)。提供对德鲁伊,Mybatis-Plus,P6sy,Jndi的快速集成。简化Druid和HikariCp配置,提供变量参数配置。配置一次,并行通用...

    spring 配置jndi

    - 配置完成后,你就可以在你的业务逻辑中注入这个数据源来执行数据库操作了。例如,你可以使用`@Autowired`注解来注入数据源: ```java @Autowired private DataSource dataSource; ``` 5. **注意事项**: -...

    hibernate同时配置多个数据库连接

    - **使用DataSource**:如果使用Java的JNDI数据源,可以将多个数据库的连接信息配置在应用服务器中,然后在Hibernate配置文件中引用这些数据源。 6. **性能优化** - **连接池管理**:为了提高性能,建议为每个...

    spring-boot-mybatis+c3p0示例demo

    这样,当多个请求并发时,C3P0可以有效地复用已有的数据库连接,减少系统开销。 在这个示例中,我们可能会看到以下步骤: 1. 添加Spring Boot、MyBatis和C3P0的依赖到项目的`pom.xml`或`build.gradle`文件。 2. ...

    Spring基本架包

    8. **spring-aop-4.3.18.RELEASE.jar**:面向切面编程(AOP)模块允许开发者定义“切面”,这些切面可以插入到多个对象的方法调用中,实现如日志记录、性能监控、事务管理等功能,提高代码的可维护性和复用性。...

    Spring配置JTA事务管理

    JTA是一个规范,它定义了接口和API,使得应用程序可以控制跨越多个数据存储(如数据库、消息队列等)的事务。它允许开发者编写无感知具体事务实现的代码,从而提高代码的可移植性和可维护性。 Spring通过...

    spring-5.3.9-schema.zip

    综上所述,Spring 5.3.9的这些模块共同构建了一个强大且灵活的框架,覆盖了企业级应用开发的多个方面。无论是数据访问、事务管理、并发处理还是Web应用和分布式系统的构建,Spring都能提供全面而高效的支持。了解并...

    spring-5.2.19.RELEASE-schema.zip

    总之,"spring-5.2.19.RELEASE-schema.zip" 包含了Spring框架的核心组件及其相关架构定义,涵盖了从Web开发到数据库操作,再到事务管理和消息传递等多个方面,为Java后端开发提供了强大的支持。理解和掌握这些知识点...

    Spring的jar包解析

    8. **spring-jdbc.jar** - 包含了对JDBC的支持,简化了数据库操作,提供了一种声明式事务管理的方式。依赖于spring-core。 9. **其他jar包** - Spring还包括其他多个jar包,如spring-web.jar(Web相关功能)、...

    java链接多个数据库配置demo

    通过这个"java链接多个数据库配置demo",你可以学习到如何在Java项目中设置和管理多个数据库连接,理解并实践上述技术,从而提升你的Java数据库开发能力。请确保仔细阅读和理解DEMO中的代码,以便更好地应用到实际...

    spring-framework-4.1.4.release-schema

    在这个压缩包中,包含了多个与Spring框架核心模块相关的Schema文件,每个文件对应Spring的一个主要组件: 1. **mvc**: MVC(Model-View-Controller)模块是Spring处理Web应用的组成部分。`mvc`目录下的Schema文件...

    跨数据库的事务管理配置jta

    通过上述配置,我们可以看到如何在一个Spring应用程序中配置多个数据源,并使用JTA进行跨数据源的事务管理。这种配置方式非常灵活,可以适应复杂的企业级应用需求。在实际应用中,根据具体的应用场景和性能需求,还...

    day2013-0110-webLogic配置和集群(赵强).zip

    2. JDBC数据源:配置和管理JDBC数据源,连接到数据库,提供统一的访问接口,支持数据源的连接池和事务管理。 3. SSL安全配置:为了保障通信安全,可以配置WebLogic支持SSL(Secure Sockets Layer),加密传输数据,...

    Spring-Reference_zh_CN(Spring中文参考手册)

    处理多个持久化单元 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 ...

    最新版spring-framework-4.3.11.RELEASE-schema.zip约束

    4.3.11.RELEASE是Spring Framework的一个稳定版本,它包含了多个模块和组件,以支持各种功能。在这个压缩包中,我们可以看到一系列子目录,每个代表了Spring Framework中的一个重要模块。现在,我们将深入探讨这些...

    开发工具 spring-jdbc-4.3.6.RELEASE.rar

    Spring JDBC是Spring框架的一个子模块,它为Java开发者提供了一个统一的接口来处理各种数据库操作,简化了JDBC的使用,提高了代码的可读性和可维护性。在4.3.6.RELEASE版本中,Spring JDBC继续强化了对事务管理、...

Global site tag (gtag.js) - Google Analytics