`
addday
  • 浏览: 67722 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

oracle驱动升级后,Atomikos数据源配置方式。

 
阅读更多

上午把oracle 驱动升级为 ojdbc14-11.2.0后,项目启动时报错:

 

 

15:56:00.827 [main] WARN  atomikos - ERROR IN RECOVERY
com.atomikos.datasource.ResourceException: Error in recovery
	at com.atomikos.datasource.xa.XATransactionalResource.recover(XATransactionalResource.java:596)
	at com.atomikos.datasource.xa.XATransactionalResource.endRecovery(XATransactionalResource.java:670)
	at com.atomikos.icatch.imp.TransactionServiceImp.recover(TransactionServiceImp.java:635)
	at com.atomikos.datasource.xa.XATransactionalResource.setRecoveryService(XATransactionalResource.java:503)
	at com.atomikos.icatch.system.Configuration.installRecoveryService(Configuration.java:278)
	at com.atomikos.icatch.imp.TransactionServiceImp.recover(TransactionServiceImp.java:580)
	at com.atomikos.icatch.imp.TransactionServiceImp.init(TransactionServiceImp.java:741)
	at com.atomikos.icatch.imp.BaseTransactionManager.init(BaseTransactionManager.java:217)
	at com.atomikos.icatch.standalone.StandAloneTransactionManager.init(StandAloneTransactionManager.java:104)
	at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:307)
	at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:413)
	at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:90)
	at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:140)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)

 

 

解决方式:将之前的AtomikosDataSourceBean配置方式换为AtomikosNonXADataSourceBean方式。

 

	<!-- 配置dataSource数据源 -->
	<bean id="parentDataSource" class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean" init-method="init"
		destroy-method="close" p:uniqueResourceName="rw1" p:testQuery="select 1 from dual" abstract="true">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:ORCL" />
		<property name="user" value="TEST_RW_1" />
		<property name="password" value="TEST_RW_1" />
		<property name="poolSize" value="5" />
		<property name="maxPoolSize" value="30" />
	</bean>

	<bean id="com.fand.dataSource.rw1" parent="parentDataSource"></bean>

	<bean id="com.fand.dataSource.rw2" p:uniqueResourceName="rw2" parent="parentDataSource">
		<property name="user" value="TEST_RW_2" />
		<property name="password" value="TEST_RW_2" />
	</bean>

	<bean id="com.fand.dataSource.rw3" p:uniqueResourceName="rw3" parent="parentDataSource">
		<property name="user" value="TEST_RW_3" />
		<property name="password" value="TEST_RW_3" />
	</bean>

	<bean id="com.fand.dataSource.rw4" p:uniqueResourceName="rw4" parent="parentDataSource">
		<property name="user" value="TEST_RW_4" />
		<property name="password" value="TEST_RW_4" />
	</bean>

	<bean id="com.fand.dataSource.r1" p:uniqueResourceName="r1" parent="parentDataSource">
		<property name="user" value="TEST_R_1" />
		<property name="password" value="TEST_R_1" />
	</bean>

	<bean id="com.fand.dataSource.r2" p:uniqueResourceName="r2" parent="parentDataSource">
		<property name="user" value="TEST_R_2" />
		<property name="password" value="TEST_R_2" />
	</bean>

	<bean id="com.fand.dataSource.r3" p:uniqueResourceName="r3" parent="parentDataSource">
		<property name="user" value="TEST_R_3" />
		<property name="password" value="TEST_R_3" />
	</bean>

	<bean id="com.fand.dataSource.r4" p:uniqueResourceName="r4" parent="parentDataSource">
		<property name="user" value="TEST_R_4" />
		<property name="password" value="TEST_R_4" />
	</bean>

	<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="transactionManager">
			<bean class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
				<property name="forceShutdown" value="true" />
			</bean>
		</property>
		<property name="userTransaction">
			<bean class="com.atomikos.icatch.jta.UserTransactionImp" p:transactionTimeout="6000" />
		</property>
		<property name="allowCustomIsolationLevels" value="true" />
	</bean>

	<tx:annotation-driven />

 

 

Atomikos数据源配置方法有三种分别:

  1. SimpleDataSourceBean
  2. AtomikosDataSourceBean
  3. AtomikosNonXADataSourceBean

下面的演示以Orcale数据库为例子

  • 数据源1:192.168.8.1   sid:orcl 用户名/密码:micmiu/micmiu.com
  • 数据源2:192.168.8.2   sid:orcl 用户名/密码:ctosun/ctosun.com

[一]、SimpleDataSourceBean

这个是最简单地数据源配置,需要配置XA驱动。

<!-- 数据源配置 simple 1 -->
<bean id="simpleDS1"
	init-method="init" destroy-method="close">
	<property name="uniqueResourceName">
		<!-- 该值要唯一 -->
		<value>simpleDS1</value>
	</property>
	<property name="xaDataSourceClassName">
		<value>oracle.jdbc.xa.client.OracleXADataSource</value>
	</property>
	<property name="xaDataSourceProperties">
		<value>URL=jdbc:oracle:thin:@192.168.8.1:1521:orcl;user=micmiu;password=micmiu.com
		</value>
	</property>
	<property name="exclusiveConnectionMode">
		<value>true</value>
	</property>
	<property name="connectionPoolSize">
		<value>3</value>
	</property>
	<property name="validatingQuery">
		<value>SELECT 1 from dual</value>
	</property>
</bean>
<!-- 数据源配置 simple 2 -->
<bean id="simpleDS2"
	init-method="init" destroy-method="close">
	<property name="uniqueResourceName">
		<value>simpleDS2</value>
	</property>
	<property name="xaDataSourceClassName">
		<value>oracle.jdbc.xa.client.OracleXADataSource</value>
	</property>
	<property name="xaDataSourceProperties">
		<value>URL=jdbc:oracle:thin:@192.168.8.2:1521:orcl;user=ctosun;password=ctosun.com
		</value>
	</property>
	<property name="exclusiveConnectionMode">
		<value>true</value>
	</property>
	<property name="connectionPoolSize">
		<value>3</value>
	</property>
	<property name="validatingQuery">
		<value>SELECT 1 from dual</value>
	</property>
</bean>

[二]、AtomikosDataSourceBean

Atomikos实现的数据源,需要配置XA驱动,推荐此配置,可以配置连接池的信息。

<!-- 数据源配置 Atomikos datasource 1 -->
<bean id="atomikosDS1"
	init-method="init" destroy-method="close">
	<property name="uniqueResourceName">
		<!-- 该值要唯一 -->
		<value>atomikosDS1</value>
	</property>
	<property name="xaDataSourceClassName">
		<value>oracle.jdbc.xa.client.OracleXADataSource</value>
	</property>
	<property name="xaProperties">
		<props>
			<prop key="URL">jdbc:oracle:thin:@192.168.8.1:1521:orcl</prop>
			<prop key="user">micmiu</prop>
			<prop key="password">micmiu.com</prop>
		</props>
	</property>
	<property name="poolSize">
		<value>5</value>
	</property>
	<property name="maxPoolSize">
		<value>15</value>
	</property>
</bean>
<!-- 数据源配置 Atomikos datasource 2 -->
<bean id="atomikosDS2"
	init-method="init" destroy-method="close">
	<property name="uniqueResourceName">
		<!-- 该值要唯一 -->
		<value>atomikosDS2</value>
	</property>
	<property name="xaDataSourceClassName">
		<value>oracle.jdbc.xa.client.OracleXADataSource</value>
	</property>
	<property name="xaProperties">
		<props>
			<prop key="URL">jdbc:oracle:thin:@192.168.8.2:1521:orcl</prop>
			<prop key="user">ctosun</prop>
			<prop key="password">ctosun.com</prop>
		</props>
	</property>
	<property name="poolSize">
		<value>5</value>
	</property>
	<property name="maxPoolSize">
		<value>15</value>
	</property>
</bean>

[三]、AtomikosNonXADataSourceBean

该数据源配置需要普通JDBC的驱动,可以配置连接池:

<!-- AtomikosNonXA datasource 1 需要普通jdbc驱动 -->
<bean id="atomikosNonXADS1">
	<property name="uniqueResourceName">
		<value>atomikosNonXADS1</value>
	</property>
	<property name="driverClassName">
		<value>oracle.jdbc.driver.OracleDriver</value>
	</property>
	<property name="url">
		<value>jdbc:oracle:thin:@192.168.8.1:1521:orcl</value>
	</property>
	<property name="user">
		<value>micmiu</value>
	</property>
	<property name="password">
		<value>micmiu.com</value>
	</property>
	<property name="poolSize">
		<value>5</value>
	</property>
	<property name="borrowConnectionTimeout">
		<value>60</value>
	</property>
</bean>
<!-- AtomikosNonXA datasource 2 需要普通jdbc驱动 -->
<bean id="atomikosNonXADS2">
	<property name="uniqueResourceName">
		<value>atomikosNonXADS2</value>
	</property>
	<property name="driverClassName">
		<value>oracle.jdbc.driver.OracleDriver</value>
	</property>
	<property name="url">
		<value>jdbc:oracle:thin:@192.168.8.2:1521:orcl</value>
	</property>
	<property name="user">
		<value>ctosun</value>
	</property>
	<property name="password">
		<value>ctosun.com</value>
	</property>
	<property name="poolSize">
		<value>5</value>
	</property>
	<property name="borrowConnectionTimeout">
		<value>60</value>
	</property>
</bean>
分享到:
评论
2 楼 addday 2013-12-27  
我正在用呢。
1 楼 hackpro 2013-09-23  
哥们,你有测试成功吗?

相关推荐

    atomikos数据源包

    5. **JNDI数据源配置**:在某些情况下,Atomikos数据源可能会通过JNDI(Java Naming and Directory Interface)进行查找和注册。这在集群环境中特别有用,因为多个服务器可以共享同一个事务管理器。在Spring中,你...

    Spring Boot + Druid + Mybatis + Atomikos 配置多数据源 并支持分布式事务

    在多数据源配置中,Druid可以作为一个高效且灵活的工具,帮助管理不同的数据库连接。 Mybatis是一个轻量级的持久层框架,它允许我们通过XML或注解来编写SQL映射文件,从而更直观地控制SQL执行。在多数据源环境中,...

    SpringBoot+Atomikos+动态多数据源+事务+2种切换数据源的方式

    然后使用`@Bean`注解创建DataSource对象,通过属性注入不同的数据源配置。Spring的`AbstractRoutingDataSource`可以帮助我们动态选择数据源,它可以根据预定义的规则(如请求参数、ThreadLocal等)来决定使用哪个...

    SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo

    2. 使用Spring Cloud Config Server:结合配置中心,可以在运行时动态更新数据源配置。当需要切换数据源时,只需要修改配置中心的配置,然后通知服务端刷新配置即可。 在描述中提到的"两条数据源",意味着项目中...

    使用springboot+jta+atomikos配置多数据源事务

    可以使用`@ConfigurationProperties`注解来自定义数据源配置,并通过`@Bean`创建数据源实例。 4. **启用JTA事务管理**:在主配置类上使用`@EnableJtaTransactionManager`注解,启用心跳检测和事务管理。 5. **数据...

    分布式事务管理SpringBoot集成Atomikos使用Oracle数据库mybatis、jta框架.rar

    SpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatis

    SpringBoot+Mybatis+Atomikos+Mysql+Oracle 多数据源分布式事物后台搭建

    SpringBoot+Mybatis+Atomikos+Mysql+Oracle 多数据源分布式事物后台搭建 完整demo包,直接下下来解压,数据库配成自己的库,表自己的表,修改下脚本直接跑,网上大把资料,没一个能直接用的,这里花了点时间稍做...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    创建多数据源的配置文件,包括AtomikosDataSourceBean的定义、TransactionManager的配置以及DynamicRoutingDataSource的实现。在业务代码中,通过`@Transactional`注解开启分布式事务,并在必要时使用`ThreadLocal`...

    Spring3.0+Hibernate+Atomikos多数据源分布式事务管理

    总的来说,Spring 3.0、Hibernate和Atomikos的组合提供了一种强大且灵活的方式来处理多数据源的分布式事务,使开发者能够构建高度可用和可扩展的企业级应用。通过深入理解这些技术的原理和实践,开发者可以更好地...

    spring+hibernate+atomikos多数据源

    6. 测试:最后,通过dstest这样的测试用例,验证多数据源配置是否正确,以及事务处理是否符合预期。 这个压缩包"dstest"可能包含了完成上述配置的源代码和测试用例,可以帮助开发者理解并实践多数据源的配置。学习...

    spring+jpa+atomikos多数据源

    在实际项目中,"jpatest"可能是一个包含测试代码的目录或者模块,用于验证多数据源配置和Atomikos事务管理是否正常工作。测试通常会涉及到插入、查询、更新和删除操作,以确保在不同数据源之间的事务处理正确无误。 ...

    springboot + mybatis + atomikos 多数据源分布式事物管理

    在 Spring Boot 中集成 Atomikos,开发者需要配置 Atomikos 作为事务管理器,并为每个数据源设置相应的配置。这通常包括指定数据源类型、连接池大小、事务超时时间等。同时,还需要在 Spring Boot 的配置文件...

    spring搭建分布式事务所需嘉宝atomikos加druid配置分布式事务

    总的来说,`spring+druid+atomikos`的组合提供了一种强大的分布式事务解决方案,尤其适用于那些需要处理复杂事务逻辑和多数据源切换的应用。但需要注意的是,这种解决方案可能会增加系统的复杂性,因此在实际应用中...

    springboot-atomikos 多数据源统一事物管理demo

    2. **配置数据源**:在Spring Boot的配置文件`application.properties`或`application.yml`中,为每个数据源定义不同的数据源配置,例如`ds1`和`ds2`。 3. **配置Atomikos事务管理器**:在Spring Boot的配置类中,...

    spring+mybatis+atomikos配置文件及相关包(最新版)

    5. 配置MyBatis:配置MyBatis的SqlSessionFactory,使用Atomikos数据源,并在Mapper配置中启用事务。 6. 业务代码:在服务层方法上添加@Transactional注解,声明事务边界。 通过上述配置,Spring、MyBatis和...

    Spring多数据源atomikos所有jar包

    Atomikos是一个开源的事务管理器,专门用于处理分布式事务,它在Spring多数据源配置中扮演着重要的角色。 Atomikos是JTA(Java Transaction API)的实现,遵循X/Open XA规范,可以提供强一致性的分布式事务处理能力...

    spring、mybatis、atomikos实现多数据源事务demo

    4. 配置MyBatis:为每个数据源配置一个SqlSessionFactory,并指定对应的DataSource。 5. 业务代码中处理事务:在需要处理跨数据源事务的方法上使用@Transactional注解,由Spring的AOP代理来管理事务的生命周期。 6...

    spring+mybatis+atomikos配置所需包跟配置文件

    4. 配置MyBatis:MyBatis需要与Spring集成,使用Spring管理SqlSessionFactory,同时需要配置使用Atomikos的数据源。 ```xml &lt;!-- 其他MyBatis配置 --&gt; ``` 5. 使用JTA事务:在Spring的Service层,使用`@...

    多数据源事务之解决方案jta+atomikos

    1. **初始化**: 应用程序配置Atomikos,包括设置事务超时时间、配置数据源等。 2. **开始事务**: 通过UserTransaction接口开始一个全局事务,这将为后续的操作创建一个事务上下文。 3. **注册资源**: 将涉及的各个...

Global site tag (gtag.js) - Google Analytics