Spring+Hibernate管理多数据源

问题描述

有两个数据库,热双机同步,只是IP不一样,然后用Spring管理数据源bean、Hibernate的SF和事务,由于要求两个数据库其中一个无法访问时,继续访问另一个,Hibernate的SF只能注入一个数据源,所以自行实现了DataSource(命名为MDS)将两个数据库的数据源由Spring注入,MDS注入到Hibernate的SF,MDS负责保存上一个正常使用的真正数据源和检测数据源是提供Connection。数据源用的是dbcp1.4,Spring3.2.4,Hibernate3.6.10。想问一下,这样会不会影响Spring的事务管理(例如前一个数据源出问题,使用了后一个数据源)。还有如何比较好地检测数据源是否适用。另外测试运行时,发现运行一会后(例如完成了一次业务操作后),程序卡死了无法响应,只注入一个数据源就基本没问题,是不是和多数据源不适应有关?自实现MDS代码:publicclassMultiDataSourceimplementsDataSource{privatestaticVector<DataSource>datasources=newVector<DataSource>();privatestaticDataSourcebeused;publicVector<DataSource>getDatasources(){returndatasources;}publicvoidsetDatasources(Vector<DataSource>datasources){MultiDataSource.datasources=datasources;if(MultiDataSource.datasources.size()>=1){this.setBeused(MultiDataSource.datasources.get(0));}}@OverridepublicConnectiongetConnection()throwsSQLException{selectDateSource(null,null);returnthis.getBeused().getConnection();}@OverridepublicConnectiongetConnection(Stringusername,Stringpassword)throwsSQLException{selectDateSource(username,password);returnthis.getBeused().getConnection(username,password);}privatevoidselectDateSource(booleannext,Stringusername,Stringpassword)throwsSQLException{Enumeration<DataSource>iter=this.getDatasources().elements();while(iter.hasMoreElements()){DataSourceds=iter.nextElement();try{Connectionconn=null;if(username==null&&password==null)conn=ds.getConnection();elseconn=ds.getConnection(username,password);if(checkConn(conn)){this.setBeused(ds);return;}else{continue;}}catch(Exceptione){continue;}}thrownewSQLException("novaliddataSource");}privatevoidselectDateSource(Stringusername,Stringpassword)throwsSQLException{try{Connectionconn_first=null;if(username==null&&password==null)conn_first=this.getBeused().getConnection();elseconn_first=this.getBeused().getConnection(username,password);if(checkConn(conn_first)){return;}else{selectDateSource(true,username,password);}}catch(Exceptione){selectDateSource(true,username,password);}}privatebooleancheckConn(Connectionconn)throwsSQLException{returnconn!=null;/*Statementst=null;try{st=conn.createStatement();returnst!=null;}catch(SQLExceptione){returnfalse;}finally{if(st!=null)st.close();}*/}//其他实现略

解决方案

解决方案二:
事务是加在连接上的吧,卡死应该是代码问题吧

时间: 2024-09-16 07:40:45

Spring+Hibernate管理多数据源的相关文章

spring整合hibernate-关于spring+hibernate配置多数据源的问题

问题描述 关于spring+hibernate配置多数据源的问题 我的项目是个webservice项目,使用了hibernate+spring框架,由于项目中要用到两个数据库(都是oracle数据库),我在网上查了一些资料,但是在我的项目中做数据源切换的时候总是切换不过去,也就是说只能连接默认的数据源,一下是我的spring配置文件: <?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="http:

spring hibernate 动态数据源 同步所有库的表结构问题

问题描述 spring hibernate 动态数据源 同步所有库的表结构问题 采取spring + hibernate 组成动态多数据源(每个库的表结构相同). 现程序升级需要对数据库表结构进行更改,将hibernate 的hibernate.hbm2ddl.auto 配置为update,结果只能修改defaultTargetDataSource 所连接的一个库. 求有可以使hibernate.hbm2ddl.auto 自动更新所有的库解决方案. 补充:是一个sessionFactory(or

Struts+Spring+Hibernate实现上传下载

上传|下载 引言 文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个著名的大件:如SmartUpload.Apache的FileUpload.但如果您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得笨重而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了. 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序.SS

JSF+Spring+Hibernate的实例讲解

js 使用JavaServer Faces(JSF).Spring Framework和Hibernate建立一个真实的Web应用程序内容概要使用JSF建立一个真实的Web应用程序不是没有意义的任务,这篇文章介绍了如何将JSF与Sping Framework和Hibernate集成,并且给出了使用这些技术建立这个真实的Web应用程序的最佳实践和设计指导 JavaServer Faces(JSF)技术是J2EE应用程序的一个新的用户接口框架,它非常适合基于MVC(Model-View-Contro

springmvc-请教:Spring + Hibernate 无法将数据写入数据库?

问题描述 请教:Spring + Hibernate 无法将数据写入数据库? Spring + Hibernate 无法将数据写入数据 请教: 通过Junit单元测试Service可以将数据写入数据库:但部署访问却无法向数据库写入数据. 1 环境: Spring 3.1.2 Hibernate 4.1.4 Jdk1.6 2 配置: 2.1 Web.xml <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后面的Spring C

Master-Slave,Spring,Hibernate,故事曲折离奇,情结跌宕起伏

/** *作者:张荣华 *日期:2008-02-05 **/ 前言,这篇文章写于08年12月份,现在发布出来望同行点评 ------------------------------------------------------------ 本文将要阐述或者讨论的是spring+hibernate和mysql的master-slave模式之间的一些不得不说的故事. 那么开始之前,按照惯例,我们要介绍一下这个两个东西 1,Hibernate,按照惯例,我们不介绍大家都知道的东西. 2, Maste

Spring事务管理的问题

问题描述 <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/><!--方式一--><propertyname="dataSource&quo

Spring事务管理--多个ORM框架在使用时的情况分析

   公司的项目已经接近尾声了,总结一下项目中用到的技术,我发现项目中的有些东西还是挺模糊的,只是知道这么用就行了.并不清楚其中的原理.由于公司的项目比较老,是7年前的一个项目了,中间一直有人在维护,也是在这个过程中不断融入了新的东西,比如就项目的持久化这块来说,就用了ibatis.mybatis.hibernate.spring JDBC四种混合的框架.究其原因只能说是历史遗留问题,就不做过多的解释了.但是这么多持久化的框架如何协同工作的,尤其是事务的控制,一个系统中使用如此多的持久化框架是,

Spring Hibernate C3p0 疑问

问题描述 配置Spring+Hibernate+C3p0的过程中,Spring的数据源是必须的吗?<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"/>或者可以配置在Hibernate.cfg.xml里面吗?Spring:<bean id="sessionFactory"c