社区
Java EE
帖子详情
求spring+hibernate配置多数据源
smith_cht
2009-11-24 09:44:39
那位有用过spring+hibernate 配置过多数据源?怎样实现多数据源之间数据共享,并且如何管理他们的事务? 最好能给我一个实例,从配置到dao实现。
网上搜到的都是只说一点,不就一点,有的就是配置过去复习,或者实现方式不理想。我就是要找一个能实际运行的。
...全文
1156
6
打赏
收藏
求spring+hibernate配置多数据源
那位有用过spring+hibernate 配置过多数据源?怎样实现多数据源之间数据共享,并且如何管理他们的事务? 最好能给我一个实例,从配置到dao实现。 网上搜到的都是只说一点,不就一点,有的就是配置过去复习,或者实现方式不理想。我就是要找一个能实际运行的。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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;"/>
本贴终于解决了网上搜了一大把关于这个问题,都是说了一大堆废话,而实际根本看了不知如何下手的误区(网上说了一大堆,都是说了一点不说一点。越看越晕。)。同时也解决了多数据源事务处理的问题(各个数据源独自处理自已的事务。)。希望能对各位遇到该问题的朋友有用。
烟雨鹏城
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)
一、 项目名称:S2316S411H436 项目原型:Struts2.3.16 +
Spring
4.1.1 +
Hibernate
4.3.6 + Quartz2.2.1 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、
Spring
4和
Hibernate
4),搭建项目架构原型。 项目架构原型:Struts2.3.16 +
Spring
4.1.1 +
Hibernate
4.3.6 + Quartz2.2.1。 此外,还有:Quartz、JUnit4、Log4j、SLF4J、Ehcache、Gson等这些库或框架,也全部使用最新版本。 三、 项目特色: 1、 同时使用了Struts2、
Spring
4、
Hibernate
4、Quartz、JUnit4、Log4j、SLF4J、Ehcache、Gson等库或框架,搭建一个最基本的项目原型。 2、
Spring
配置
提供了多种可选整合方案:详见applicationContext.xml的
配置
(1) 提供支持三种数据源方案:C3P0、DBCP、JNDI,三选一,请注释或删除其他方案 (2) 提取四种
Hibernate
整合方案:四选一,请注释或删除其他方案 (3) 提供两种声明式事务管理器方案:二选一,请注释或删除其他方案
Spring
4.2.5+
Hibernate
4.3.11+Struts2.3.24整合开发
Spring
4.2.5+
Hibernate
4.3.11+Struts2.3.24整合开发
Spring
MVC+
Hibernate
+
Spring
整合实例
Spring
MVC+
Hibernate
+
Spring
整合实例源码下载,很完整的例子,需要的可以下载源码学习
Spring
MVC+
hibernate
4.3+
Spring
4.1整合demo
一个目前最新版的SSH框架,都是昨天才去官网下载的新包。做了一个简单的登陆功能;
spring
-orm.jar
spring
-orm.jar
Java EE
67,549
社区成员
225,860
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章