精华帖 (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> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-08-07
我也要关注一下,我目前有项目要改造,之前是用struts+jdbc,现在要改造成struts+spring+ibatis,所以得构建一个基础框架,但是有很多问题:因为系统之前有很多数据库,在一个操作中可能要同时对两个不同数据源进行操作,先不考虑多个数据库的同步问题,在Ibatis中能不能实现动态切换数据源呢?还有一个分页的问题? 对spring和ibatis只是用过,但不熟悉.希望能有更多的人进来讨论及赐教.
|
|
返回顶楼 | |
发表时间:2007-08-08
是不是可以这样实现呢,看附件了
|
|
返回顶楼 | |
发表时间:2007-08-10
cljhyjs 写道 是不是可以这样实现呢,看附件了
你这个想法我之前就想过了,我现在的问题是如果在dao中想切换数据源呢?比如说dao中有两个方法,一个要查db1的数据,一个方法要查db2的数据那该怎么办呢?
|
|
返回顶楼 | |
发表时间:2007-08-13
sam1982 写道 cljhyjs 写道 是不是可以这样实现呢,看附件了
你这个想法我之前就想过了,我现在的问题是如果在dao中想切换数据源呢?比如说dao中有两个方法,一个要查db1的数据,一个方法要查db2的数据那该怎么办呢?这种类型,可不可以在DAO方法中特殊处理呢,比如写去lookup datasource写hql呢,其实hibernate3.0中已经可以实现继承了,一个类可以由几个PO类组成,每个PO类都可以配置自己的数据源,可以把PO类的原子粒度化分的小一点。 |
|
返回顶楼 | |
发表时间:2007-08-14
cljhyjs 写道 sam1982 写道 cljhyjs 写道 是不是可以这样实现呢,看附件了
你这个想法我之前就想过了,我现在的问题是如果在dao中想切换数据源呢?比如说dao中有两个方法,一个要查db1的数据,一个方法要查db2的数据那该怎么办呢?这种类型,可不可以在DAO方法中特殊处理呢,比如写去lookup datasource写hql呢,其实hibernate3.0中已经可以实现继承了,一个类可以由几个PO类组成,每个PO类都可以配置自己的数据源,可以把PO类的原子粒度化分的小一点。 另外还有一个问题,如果采用多数源的话,那用Spring怎么进行事务管理啊.比如说一个Service对应多个DAO,每个DAO都有自己的数据源,但是呢?只有一个DAO有更新事务,那怎么将这个事务管理定位到这个DAO上呢? |
|
返回顶楼 | |
发表时间:2007-08-15
呵呵,多个数据源的事务问题。有多种解决方法,分布式事务吧。这个你可以多看看。
|
|
返回顶楼 | |
发表时间:2007-08-17
cljhyjs 写道 呵呵,多个数据源的事务问题。有多种解决方法,分布式事务吧。这个你可以多看看。 我当然是指在不用 的情况下啊.
|
|
返回顶楼 | |
发表时间:2007-08-17
我正好做的系统也是这个一个框架,不过我改了ibatis的源代码。
——不是有builddaomnanager(reader,properties)么,这个properties被我变成向ibatis传递新的数据库信息的对象,然后这个方法返回新数据库的daomananger。 ----前台是通过ajax切换数据库的。 |
|
返回顶楼 | |
发表时间:2007-08-17
bonny 写道 我正好做的系统也是这个一个框架,不过我改了ibatis的源代码。
其实切换数据源我倒觉得不难,难的是切换了数据源,那么在spring声明事务管理器怎么也知道呢,就是说,能不能在spring只声明一个事务管理器,但当你的事务管理器具体使用哪个数据源的时候,它就能控制这个数据源的事务
——不是有builddaomnanager(reader,properties)么,这个properties被我变成向ibatis传递新的数据库信息的对象,然后这个方法返回新数据库的daomananger。 ----前台是通过ajax切换数据库的。 |
|
返回顶楼 | |