论坛首页 Java企业应用论坛

ibatis+spring:如何访问多数据库连接池?

浏览 19006 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-10  
我的工程现在是用webwork+ibatis+spring的框架,因为一些变化需要访问多数据库,现在的问题是如何在现有的基础上进行多数据库连接池的配置呢?

下面是我现有的可以正常运行的spring配置文件,dataAccessContext-local.xml:



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath*:config/jdbc.properties</value>
			</list>
		</property>
	</bean>

	<!-- ========================= RESOURCE DEFINITIONS ========================= -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${jdbc.driverClassName}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="properties">
        <props>
            <prop key="c3p0.minPoolSize">1</prop> 
            <prop key="hc3p0.maxPoolSize">10</prop> 
            <prop key="hc3p0.timeout">60</prop> 
            <prop key="c3p0.max_statement">50</prop> 
            <prop key="c3p0.testConnectionOnCheckout">true</prop> 
            <prop key="hibernate.c3p0.testConnectionOnCheckout">false</prop>
            <prop key="user">${jdbc.username}</prop> 
            <prop key="password">${jdbc.password}</prop>
        </props>
      </property>
	</bean>

	<!-- Transaction manager for a single JDBC DataSource -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>

	<!-- SqlMap setup for iBATIS Database Layer -->
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation" value="classpath:config/sql-map-config.xml"/>
		<property name="dataSource" ref="dataSource"/>
	</bean>
    
	<bean id="txProxyTemplate" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
	lazy-init="true">    
        <property name="transactionManager"><ref bean="transactionManager" /></property>    
        <!--指明事务属性-->  
        <property name="transactionAttributes">    
            <props>    
                <prop key="insert*">PROPAGATION_REQUIRED</prop>    
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>   
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="remove*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> 
            </props>    
        </property>    
    </bean>     

</beans>
   发表时间:2007-08-07  
我也要关注一下,我目前有项目要改造,之前是用struts+jdbc,现在要改造成struts+spring+ibatis,所以得构建一个基础框架,但是有很多问题:因为系统之前有很多数据库,在一个操作中可能要同时对两个不同数据源进行操作,先不考虑多个数据库的同步问题,在Ibatis中能不能实现动态切换数据源呢?还有一个分页的问题? 对spring和ibatis只是用过,但不熟悉.希望能有更多的人进来讨论及赐教.
0 请登录后投票
   发表时间:2007-08-08  
是不是可以这样实现呢,看附件了
  • 描述: 示意图
  • 大小: 34.9 KB
0 请登录后投票
   发表时间:2007-08-10  
cljhyjs 写道
是不是可以这样实现呢,看附件了
你这个想法我之前就想过了,我现在的问题是如果在dao中想切换数据源呢?比如说dao中有两个方法,一个要查db1的数据,一个方法要查db2的数据那该怎么办呢?
0 请登录后投票
   发表时间:2007-08-13  
sam1982 写道
cljhyjs 写道
是不是可以这样实现呢,看附件了
你这个想法我之前就想过了,我现在的问题是如果在dao中想切换数据源呢?比如说dao中有两个方法,一个要查db1的数据,一个方法要查db2的数据那该怎么办呢?


  这种类型,可不可以在DAO方法中特殊处理呢,比如写去lookup datasource写hql呢,其实hibernate3.0中已经可以实现继承了,一个类可以由几个PO类组成,每个PO类都可以配置自己的数据源,可以把PO类的原子粒度化分的小一点。
0 请登录后投票
   发表时间:2007-08-14  
cljhyjs 写道
sam1982 写道
cljhyjs 写道
是不是可以这样实现呢,看附件了
你这个想法我之前就想过了,我现在的问题是如果在dao中想切换数据源呢?比如说dao中有两个方法,一个要查db1的数据,一个方法要查db2的数据那该怎么办呢?


  这种类型,可不可以在DAO方法中特殊处理呢,比如写去lookup datasource写hql呢,其实hibernate3.0中已经可以实现继承了,一个类可以由几个PO类组成,每个PO类都可以配置自己的数据源,可以把PO类的原子粒度化分的小一点。
老兄,Hibernate可以我知道啊,但是现在说的是Ibatis啊~~~
另外还有一个问题,如果采用多数源的话,那用Spring怎么进行事务管理啊.比如说一个Service对应多个DAO,每个DAO都有自己的数据源,但是呢?只有一个DAO有更新事务,那怎么将这个事务管理定位到这个DAO上呢?
0 请登录后投票
   发表时间:2007-08-15  
呵呵,多个数据源的事务问题。有多种解决方法,分布式事务吧。这个你可以多看看。
0 请登录后投票
   发表时间:2007-08-17  
cljhyjs 写道
呵呵,多个数据源的事务问题。有多种解决方法,分布式事务吧。这个你可以多看看。
我当然是指在不用 的情况下啊.
0 请登录后投票
   发表时间:2007-08-17  
我正好做的系统也是这个一个框架,不过我改了ibatis的源代码。

——不是有builddaomnanager(reader,properties)么,这个properties被我变成向ibatis传递新的数据库信息的对象,然后这个方法返回新数据库的daomananger。

----前台是通过ajax切换数据库的。
0 请登录后投票
   发表时间:2007-08-17  
bonny 写道
我正好做的系统也是这个一个框架,不过我改了ibatis的源代码。

——不是有builddaomnanager(reader,properties)么,这个properties被我变成向ibatis传递新的数据库信息的对象,然后这个方法返回新数据库的daomananger。

----前台是通过ajax切换数据库的。
其实切换数据源我倒觉得不难,难的是切换了数据源,那么在spring声明事务管理器怎么也知道呢,就是说,能不能在spring只声明一个事务管理器,但当你的事务管理器具体使用哪个数据源的时候,它就能控制这个数据源的事务
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics