spring 3.0 +ibatIS2.0 两个数据源的实现 博客分类: spring spring3ibatIS2两个数据源
程序员文章站
2024-03-01 15:42:58
...
项目变更需求
需要在生产库获得某一表的序列值,以此为主键插入到查询库。
修改spring配置,使其链接两个数据源。
以下为两个数据源配置。
代码:
spring xml配置,新增加了一个数据源,因为新的数据源只是查询使用,没有做事务处理。
<!--spring3 读取配置文件信息--> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="ignoreResourceNotFound" value="true"/> <property name="locations"> <list> <value>classpath*:/configs/config/db.properties</value> <value>classpath*:/configs/config/project.properties</value> </list> </property> </bean> <!-- 数据源配置1 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClass"> <value>${jdbc.driver}</value> </property> <property name="jdbcUrl"> <value>${jdbc.url}</value> </property> <property name="user"> <value>${jdbc.username}</value> </property> <property name="password"> <value>${jdbc.password}</value> </property> <property name="minPoolSize"> <value>0</value> </property> <property name="maxPoolSize"> <value>100</value> </property> <property name="acquireIncrement"> <value>5</value> </property> <property name="maxIdleTime"> <value>10</value> </property> <property name="maxStatements"> <value>0</value> </property> <property name="numHelperThreads"> <value>3</value> </property> <!-- 当连接池连接耗尽时,客户端getConnection(),所等待的时间--> <property name="idleConnectionTestPeriod" value="120" /> <!-- 当连接失效时,获得连接的次数,0为无限次(重连)--> <property name="acquireRetryAttempts" value="30" /> </bean> <!-- 事务定义 begin--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--service 里的方法(需要事务的)必须在 service类中以insert,update,delete开头 --> <tx:advice id="txAdvice"> <tx:attributes> <tx:method name="insert*"/> <tx:method name="update*"/> <tx:method name="delete*"/> <tx:method name="batch*"/> <!--<tx:method name="batch*"/>--> <tx:method name="get*" read-only="true"/> <tx:method name="find*" read-only="true"/> </tx:attributes> </tx:advice> <aop:config proxy-target-class="false"> <aop:advisor pointcut="execution(* com.*.*.service.*.*Service.*(..))" advice-ref="txAdvice"/> <aop:advisor pointcut="execution(* com.*.*.*.*.service.*Service.*(..))" advice-ref="txAdvice"/> </aop:config> <!-- 事务定义 end--> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="classpath:configs/ibatis/SqlMapConfig.xml"/> <property name="dataSource" ref="dataSource"/> </bean> <!-- *************************第二个数据源配置************************************************ --> <!-- 数据源配置2 --> <bean id="dataSourceDB2" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClass"> <value>${jdbc.driver}</value> </property> <property name="jdbcUrl"> <value>${jdbc.url2}</value> </property> <property name="user"> <value>${jdbc.username2}</value> </property> <property name="password"> <value>${jdbc.password2}</value> </property> <property name="minPoolSize"> <value>0</value> </property> <property name="maxPoolSize"> <value>100</value> </property> <property name="acquireIncrement"> <value>5</value> </property> <property name="maxIdleTime"> <value>10</value> </property> <property name="maxStatements"> <value>0</value> </property> <property name="numHelperThreads"> <value>3</value> </property> <!-- 当连接池连接耗尽时,客户端getConnection(),所等待的时间--> <property name="idleConnectionTestPeriod" value="120" /> <!-- 当连接失效时,获得连接的次数,0为无限次(重连)--> <property name="acquireRetryAttempts" value="30" /> </bean> <bean id="sqlMapClientDB2" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="classpath:configs/ibatis/SqlMapConfigDB2.xml"/> <property name="dataSource" ref="dataSourceDB2"/> </bean> <!-- 总体dao层 sqlMapClient提供数据库1链接,sqlMapClientDB2提供数据库2链接 --> <bean id="ibatisEntityDao" class="com.fenghuoyun.dataintegration.common.ibatis.IBatisEntityDaoImpl"> <property name="sqlMapClient" ref="sqlMapClient"/> <property name="sqlMapClientDB2" ref="sqlMapClientDB2"/> </bean>
ibatIS 基础 dao :
@SuppressWarnings("unchecked") public class IBatisEntityDaoImpl extends SqlMapClientDaoSupport implements IEntityDao { protected SqlMapClient sqlMapClientDB2;//第二个数据库 public SqlMapClient getSqlMapClientDB2() { return sqlMapClientDB2; } public void setSqlMapClientDB2(SqlMapClient sqlMapClientDB2) { this.sqlMapClientDB2 = sqlMapClientDB2; } public <T> T viewEntityDB2(String xmlId, Object id) throws SQLException { T t = (T)sqlMapClientDB2.queryForObject(xmlId, id); return t; } public <T> T viewEntity(String xmlId, Object id) { T t = (T) getSqlMapClientTemplate().queryForObject(xmlId, id); return t; } }
使用的时候调用不同的方法去两个数据库查询数据。
dao为测试,且第二个数据源没有事务处理。
经过测试,成功。
推荐阅读
-
spring 3.0 +ibatIS2.0 两个数据源的实现 博客分类: spring spring3ibatIS2两个数据源
-
Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法
-
Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法
-
基于spring的aop实现多数据源动态切换 博客分类: javaspring 动态切换springaopAbstractRoutingDataSource
-
Spring 中MVC配置双数据源实现一个java项目同时连接两个数据库的方法
-
Spring 中MVC配置双数据源实现一个java项目同时连接两个数据库的方法