Spring,JOTM,Mybatis多数据源动态配置和使用

本文介绍了如何在Spring项目中结合JOTM事务管理器实现多数据源动态配置,包括配置基础数据源、JOTM实例、数据源及事务管理、动态创建数据源和线程绑定数据源ID的方法。通过这种方式,可以在不同场景下灵活地操作不同的数据库。
摘要由CSDN通过智能技术生成

最近项目中用到了多数据源,同时或者不同场景下操作不同的数据库,故而总结此篇文章。

JOTM (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整的且资源开放的独立的事务管理器。完全分布式事务支持.如果数据层、业务层、表示层运行在不同的 JVM 上,则有可能有一个全程的事务跨度这些JVM,事务的内容在 RMI/JRMP 和 RMI/IIOP 上传播。并且Spring对JOTM提供了较好的支持。

1.配置基础数据源(默认连接的数据库为常用数据库):jdbc.properties:

#oracle
portal.jdbc.driverClass=oracle.jdbc.driver.OracleDriver
portal.jdbc.jdbcUrl=jdbc:oracle:thin:@1.1.1.1:1521:orapub
portal.jdbc.user=testuser
portal.jdbc.password=123456

#JOTM分布式数据源连接池
#最小连接数
jdbc.minPoolSize=0
#最大连接数
jdbc.maxPoolSize=200
#PoolKeeper检测时间间隔 
jdbc.sleepTime=120
#连接生命周期(上次访问时间-当前时间)
jdbc.lifeTime=120
#超过最大连接之后的调用getConnection的等待时间
jdbc.deadLockMaxWait=120
#超过最大连接之后的调用getConnection等待,在等待中重试的时间间隔
jdbc.deadLockRetryWait=100

2.数据源、事务配置文件spring.xml

<!-- JOTM实例 : JotmFactoryBean实现FactoryBean, DisposableBean --> 
        <bean id="jotm" class="com.utils.jotmutil.JotmFactoryBean"> 
          <property name="defaultTimeout" value="500000"/> 
        </bean>
        <bean id="myJtaManager" 
                    class="org.springframework.transaction.jta.JtaTransactionManager"> 
                <property name="userTransaction"> 
                        <ref local="jotm"/> 
                </property> 
        </bean> 

<!-- 通过扫描的模式,扫描目录在com/hoo/任意目录下的mapper目录下,所有的mapper都需要继承SqlMapper接口的接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
   <property name="basePackage" value="com.hoo.**.mapper" />
   <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate"/>
</bean> 
<!-- 配置自定义的SqlSessionTemplate模板,注入相关配置,CustomSqlSessionTemplate继承SqlSessionTemplate重写相关方法 -->
<bean id="sqlSessionTemplate" class="com.utils.jotmutil.CustomSqlSessionTemplate">
   <constructor-arg ref="portalSqlSessionFactory" />
   <property name="targetSqlSessionFactorys">
       <map>  </map> 
   </property>
</bean>    
<!-- 配置DataSource数据源 -->
<!-- 数据源portal 常用数据库 --> 
<bean id="portal" 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="${portal.jdbc.driverClass}"/> 
       <property name="url" value="${portal.jdbc.jdbcUrl}"/> 
</bean> 
</property> 
<property name="user" value="${portal.jdbc.user}"/> 
<property name="password" value="${portal.jdbc.password}"/> 
<property name="minSize" value="${jdbc.minPoolSize}"/>
<property name="maxSize" value="${jdbc.maxPoolSize}"/>
       <property name="sleepTime" value="${jdbc.sleepTime}"/>
<property name="lifeTime" value="${jdbc.lifeTime}"/>
       <property name="deadLockMaxWait" value="${jdbc.deadLockMaxWait}"/>
<property name="deadLockRetryWait" value="${jdbc.deadLockRetryWait}"/>
</bean> 
<!--创建sqlSessionFactory -->
        <bean id="portalSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                <property name="dataSource" ref="portal"/>
<property name="mapperLocations" value="classpath*:com/hoo/**/*.xml" />
        </bean>
     
    <bean id="jdbcTemplate" 
         class="org.springframework.jdbc.core.JdbcTempla

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值