社区
Java EE
帖子详情
求spring+hibernate配置多数据源
smith_cht
2009-11-24 09:44:39
那位有用过spring+hibernate 配置过多数据源?怎样实现多数据源之间数据共享,并且如何管理他们的事务? 最好能给我一个实例,从配置到dao实现。
网上搜到的都是只说一点,不就一点,有的就是配置过去复习,或者实现方式不理想。我就是要找一个能实际运行的。
...全文
1147
6
打赏
收藏
求spring+hibernate配置多数据源
那位有用过spring+hibernate 配置过多数据源?怎样实现多数据源之间数据共享,并且如何管理他们的事务? 最好能给我一个实例,从配置到dao实现。 网上搜到的都是只说一点,不就一点,有的就是配置过去复习,或者实现方式不理想。我就是要找一个能实际运行的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xinqinghaohaohao123
2010-03-16
打赏
举报
回复
见过相同的问题,在这里
Spring 与 Hibernate 配置多数据源
和
spring和hibernate配置两个数据源问题
liminshuai
2010-01-06
打赏
举报
回复
smith_cht 所说:同时也解决了多数据源事务处理的问题(各个数据源独自处理自已的事务。)
这样是没有办法 实现多数据源之间数据共享,并且管理他们事务的。
多数据源的事务控制必须使用 jta
在
http://blog.sina.com.cn/bllms
有我的文章 tomcat 使用jotm支持jta
里面详细说明如何使用 jotm支持jta ,当然 也不是非要使用jotm ,也可以手动 写jta 的代码。
但是 smith_cht 已经使用了 spring ,那么使用 事务拦截也是顺理成章的。而且也提供了对jotm的支持!
对原来的代码也影响很小!
smith_cht
2009-11-29
打赏
举报
回复
终于经过本人的多次配置测试结果,最终使用了另一种方式来实现spring多数据源的配置:下面是我的配置经验,贴出来,供各位参考,我的多数据源只需要配置即可,不用像美女程序员那样还要编写程序set来set去的,麻烦。使用我的方式,你不需要修改任何代码。下面是我的详细配置:applicationContent.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:context-portal.properties</value>
</list>
</property>
</bean>
<!-- JNDI DS1 -->
<bean id="dataSource1" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/xxxDS1</value>
</property>
</bean>
<!-- JNDI DS2 -->
<bean id="dataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/xxxDS2</value>
</property>
</bean>
<bean id="sessionFactory1"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource1" />
</property>
<property name="mappingResources">
<list>
<!-- 权限管理 -->
<value>hbm.group.xml</value>
<value>hbm.group_prv.xml</value>
<value>hbm.privilege.xml</value>
<value>hbm.user_account.xml</value>
<value>hbm.user_base.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
<prop key="hibernate.connection.release_mode">
${hibernate.connection.release_mode}
</prop>
<prop key="hibernate.format_sql">
${hibernate.format_sql}
</prop>
<prop key="hibernate.query.substitutions">
${hibernate.query.substitutions}
</prop>
<prop key="hibernate.jdbc.batch_size">
${hibernate.jdbc.batch_size}
</prop>
</props>
</property>
</bean>
<bean id="transactionManager1"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory1" />
</property>
</bean>
<bean id="transactionInterceptor1" abstract="true"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager1" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<prop key="save*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="remove*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="update*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="insert*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="delete*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="add*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="search*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="sessionFactory2"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource2" />
</property>
<property name="mappingResources">
<list>
<value>hbm.team_client_access_day_ver_change.xml</value>
<value>hbm.team_client_access_day_ver_count.xml</value>
<value>hbm.team_client_access_sleep30day.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
<prop key="hibernate.connection.release_mode">
${hibernate.connection.release_mode}
</prop>
<prop key="hibernate.format_sql">
${hibernate.format_sql}
</prop>
<prop key="hibernate.query.substitutions">
${hibernate.query.substitutions}
</prop>
<prop key="hibernate.jdbc.batch_size">
${hibernate.jdbc.batch_size}
</prop>
</props>
</property>
</bean>
<bean id="transactionManager2"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory2" />
</property>
</bean>
<bean id="transactionInterceptor2" abstract="true"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager2" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<prop key="save*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="remove*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="update*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="insert*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="delete*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="add*">
PROPAGATION_REQUIRED,-BaseException
</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="search*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Manager,-transactionManager1</value>
<value>*Manager,-transactionManager2</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor1</value>
<value>transactionInterceptor2</value>
</list>
</property>
</bean>
<!-- local DS 这种方式只适用单数据源,这里暂保留记录
<bean id="dataSourceJDBC"
class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="${datasource.driverClassName}" />
<property name="driverUrl" value="${datasource.url}" />
<property name="user" value="${datasource.username}" />
<property name="password" value="${datasource.password}" />
<property name="houseKeepingTestSql"
value="${datasource.houseKeepingTestSql}" />
<property name="maximumConnectionCount"
value="${datasource.maximumConnectionCount}" />
<property name="minimumConnectionCount"
value="${datasource.minimumConnectionCount}" />
<property name="delegateProperties"
value="characterEncoding=gbk" />
</bean>
-->
<!-- DAO的配置-->
<bean id="userDao" class="XXX.UserManageDaoImpl">
<property name="sessionFactory" ref="sessionFactory1"></property>
</bean>
<bean id="logsDao" class="XXX.LogsDaoImpl">
<property name="sessionFactory" ref="sessionFactory2"></property>
</bean>
<!--Service的配置-->
<bean name="userService" class="XXX.UserManageServiceImpl">
<property name="dao" ref="userDao"></property>
</bean>
<bean name="logsService" class="XXX.LogsServiceImpl">
<property name="dao" ref="logsDao"></property>
</bean>
<!-- action的配置-->
<bean id="userAction" class="XXX.UserAction"
scope="prototype">
<property name="userService">
<ref bean="userService" />
</property>
</bean>
<bean id="logsAction" class="XXX.LogsAction"
scope="prototype">
<property name="logsService">
<ref bean="logsService" />
</property>
</bean>
</beans>
这个就是一个完整的配置了,你的实现代码跟你使用单数据源的代码一样。只是你调用时使用不同的dao即可使用不同的数据源了。这里一定要注意,数据源一定要配置JNDI的方式,使用其它JDBC的方式都无法识别不同的数据源。这个也是我配置多次失败的原因。
配置JNDI的方法也很简单,如使用TOMCAT的配置方法是,打开%TOMCAT_HOME%\conf\content.xml文件。
加入如下结点,即可完成JNDI的配置:
<Resource name="jdbc/XXXDS1" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="xx" password="xx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://XX.XX.XX.XXX:1433;databaseName=XXX;"/>
<Resource name="jdbc/XXXDS2" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="xx" password="xx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://XX.XX.XX.XX:1433;databaseName=XXX;"/>
本贴终于解决了网上搜了一大把关于这个问题,都是说了一大堆废话,而实际根本看了不知如何下手的误区(网上说了一大堆,都是说了一点不说一点。越看越晕。)。同时也解决了多数据源事务处理的问题(各个数据源独自处理自已的事务。)。希望能对各位遇到该问题的朋友有用。
道光2008
2009-11-25
打赏
举报
回复
晕,昨天刚回答的问题
看这个
http://topic.csdn.net/u/20091124/11/7e80dc5a-8447-44a5-943f-4b7d615d045b.html
smith_cht
2009-11-24
打赏
举报
回复
谢谢你的提醒。我找找看。
Landor2004
2009-11-24
打赏
举报
回复
网上找了一圈没找着合适的吧,其实spring参考手册上就有个听完整的例子
spring+hibernate配置分布式事务,我就不给你copy了
在“中间层事务访问--...--hibernate”里
最新版本的Struts2+
Spring
4+
Hibernate
4三大框架整合(改进:增加整合Quartz和Gson)
(1) 提供支持三种数据源方案:C3P0、DBCP、JNDI,三选一,请注释或删除其他方案 (2) 提取四种
Hibernate
整合方案:四选一,请注释或删除其他方案 (3) 提供两种声明式事务管理器方案:二选一,请注释或删除其他...
java web技术开发大全(最全最新)
《Java Web开发技术大全:JSP+Servlet+Struts+
Hibernate
+
Spring
+Ajax》所涉及的源代码 布衣暖,菜根香,好书滋味长!清华大学出版社长期以来一直秉承为读者多出好书的宗旨,多年来为读者奉献了大量脍炙人口的精品图书...
spring
+
hibernate
配置
多个数据源以及使用
有时项目较大或者数据库设计的问题,一个项目可能需要连接多个数据源,现在用我的成功的demo写一下步骤,以连个数据源为例,更多个也是一样的。1、多个数据库参数 在jdbc.Properties中,
配置
两个数据库的连接。在此处...
Spring
+
Hibernate
配置
多数据源
配置
说明 在实际应用中,经常会用到读写分离,这里就这种情况进行
Spring
+
Hibernate
的
多数据源
配置
。此处的
配置
只是让读的方法操作一个数据库,写的方法操作另外一个数据库。 注:我这里的
配置
...
Spring
+
hibernate
配置
多数据源
多数据源
让人最头痛的,不是
配置
多个数据源,而是如何能灵活动态的切换数据源。例如在一个
spring
和
hibernate
的框架的项目中,我们在
spring
配置
中往往是
配置
一个dataSource来连接数据库,然后绑定给sessionFactory,...
Java EE
67,512
社区成员
225,880
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章