`
pedestrian_I
  • 浏览: 52926 次
  • 性别: Icon_minigender_1
  • 来自: 香港
社区版块
存档分类
最新评论

连接池控制多个数据源

    博客分类:
  • J2EE
阅读更多
需求场景如下:
J2EE系统有两个数据库:数据库A,数据库B(都是Oracle数据库,以读数据为主)
现要求在系统与数据库中间加入连接池。
数据库A是主数据库,平时正常连接是连接到A读写数据。
当A数据库挂了,连接不上或者忙碌用户达到某个数量的时候(我们假如是10个),系统访问数据库B。
当A数据库恢复正常了或者忙碌用户小于某个数量的时候(我们假如是1),重新连接回数据库B。

初步采用的C3P0连接池方案。
为系统配置两个数据源(Datasource),用程序监控两个数据源的使用情况。
并且根据实际情况做切换。

这是一个初步想法,不知道能不能行得通,有没有什么要特别考虑的,请各位大大指点一二。
谢谢。
分享到:
评论
28 楼 chen4059 2009-07-21  
双机冷备,HA吧。
想好就要投入啊。
赛的VCS不错。
27 楼 jayxu 2009-07-17  
你的应用场景没必要这样做

26 楼 whitesock 2009-07-17  
使用LVS
25 楼 taojingrui 2009-07-17  
Weblogic 有multiple datasource 的概念,所以用Weblogic 的datasource 就能满足你的要求。看看其他开源的datasource是否有类似的实现。
24 楼 duduli 2009-07-16  
这个我刚看到了 在blogjava中
   有一篇文章,不过他不是用连接池
可以参考一下
http://www.blogjava.net/youxia/archive/2009/07/15/286916.html
在SpringSide 3 中使用多个数据库的方法
23 楼 pedestrian_I 2009-07-16  
codger 写道
oracle的rac加数据源配置即可

我知道可以,但是上面不用我也没办法啊。
哎……
22 楼 codger 2009-07-16  
oracle的rac加数据源配置即可
21 楼 pedestrian_I 2009-07-16  
81261686 写道
我做过同一个应用里面使用spring根据域名切换四十个不同的数据源,楼主的方法应该可行。只是在切换条件上要好好考虑。


关于切换条件,这位仁兄有没有一些建议。我现在怕是遗漏。
不知道能不能指点一二啊。
20 楼 pedestrian_I 2009-07-16  
xieke 写道
非常简单,搞个全局静态变量 DB_NO,缺省为0,

系统启动时,把几个连接池都载入,放到 DBPool[] 数组中,

getConnection() 方法 中, 根据DB_NO ,返回相应连接池 DBPool[DB_NO] 的 connection,

系统运行时可以动态改变DB_NO,动态切换数据库。

至于切换策略,根据你的系统实际情况自己编写。


我暂时是这样实现的,切换策略的话也比较简单
条件1:当数据源1获取不到connection时
条件2:当数据源1忙碌的时候,C3P0有API可以做到获取当前数据源的忙碌用户数和空闲connection数
条件3:当数据源1挂了的时候,抛出异常那么获取数据源2

只是这个也有一个问题,如果在切换1和2的这段时间,有request进来,会不会出现异常情况呢。
这个间隔时间,如果出现异常,则考虑重试request机制,虽然用户等久点,但是不会出现错误。
19 楼 pedestrian_I 2009-07-16  
jwinder 写道
考虑问题:
1、应用服务器宕掉了!
2、网络被阻塞了!
3、DB挂了!
等等。
有些事不能想像的!


其实我也不想那么做,在数据库上层次的东西在应用层上是很难控制的。我真的没什么信心会出现什么异常状况的。
可能上头是想做的比较通用一些,以后无论是用哪个数据库,都可以做到这样的均衡负载。
18 楼 pedestrian_I 2009-07-16  
eclipse2008 写道
此问题属于集群与负载均衡问题。

可以研究一下相应web服务器或者应用服务器的配置。


我也知道这个是均衡负载的问题,只是上头不让在数据库层做。
我也没有办法
17 楼 lnaigg 2009-07-16  
现在一般数据库都支持集群

不过LZ不是说集群,而是两个异构数据库吧。

oracle和db2都有联邦数据库产品的,其他厂商可能也有。
16 楼 pubx 2009-07-15  
oracle rac就可以了集群了啊,应用程序不需要做什么改动。
15 楼 tangdaibing 2009-07-15  
这应该是数据库端就可以搞定的东西为什么要搞得这么复杂
14 楼 方世玉 2009-07-15  
双机加浮动IP就搞定了,何必自己应用软件来搞,效果还不好。就问一个,你的应用程序怎么监控DB当了?
13 楼 vvggsky 2009-07-15  
AbstractRoutingDataSource。

适当做下手脚,Connection getConnection(),proxy下返回的Connection ,

添加计数功能,get 时++,close时--

然后根据得到的链接数实现自己的查找DataSource的策略!
12 楼 81261686 2009-07-15  
我做过同一个应用里面使用spring根据域名切换四十个不同的数据源,楼主的方法应该可行。只是在切换条件上要好好考虑。
11 楼 srdrm 2009-07-15  
自己做一个 DataSource 专门完成主备数据源切换功能就行了. 可以聚合两个外部c3p0的连接池数据源来实现
10 楼 unsid 2009-07-15  
这个功能你要自己写阿?数据库本身不就支持么?
9 楼 xieke 2009-07-14  
非常简单,搞个全局静态变量 DB_NO,缺省为0,

系统启动时,把几个连接池都载入,放到 DBPool[] 数组中,

getConnection() 方法 中, 根据DB_NO ,返回相应连接池 DBPool[DB_NO] 的 connection,

系统运行时可以动态改变DB_NO,动态切换数据库。

至于切换策略,根据你的系统实际情况自己编写。

相关推荐

    关于数据库连接池和动态数据源的实现

    数据源连接池的基本用法,配置信息,代码案例、 实现数据源的动态切换和案例 数据源连接池的基本用法,配置信息,代码案例、 实现数据源的动态切换和案例 数据源连接池的基本用法,配置信息,代码案例、 实现...

    springboot+mybatis多数据源+动态数据源配置(连接池)

    springboot+mybatis多数据源+动态数据源配置(连接池),mysql数据库,代码实现了简单的读写分离,但是不建议这种操作,建议使用数据库中间件进行读写分离,例如使用mycat进行读写分离主从热备,使用该代码对于多个...

    jdbc使用c3p0连接池连接数据库的工具类

    jdbc使用c3p0连接池连接数据库,支持配置多个数据源,有相关的查询测试。

    基于C++实现多线程连接池MySQL源码+项目说明+详细代码注释.zip

    连接池主要用于`网络服务器端`,用于同时接受`多个用户端`请求,数据库与数据库客户端采用`TCP通信`. * 数据库客户端和服务端先建立起`多个连接` * 多线程通过`套接字通信`取出连接池中的一个连接,然后和服务器...

    springboot2+mybatis多数据源配置

    相信很多朋友在开发的时候,可能会碰到需要一个项目,配置多个数据源的需求,可能是同一种数据库,也可能是不同种类的数据库,这种情况,我们就需要配置多数据源对程序的支持了。 本项目就是一个多数据源的配置,...

    springboot +mongodb多数据源

    spring.data.primary.mongodb.uri= mongodb://192.168.10.136:27017/eqt #spring.data.secondary.mongodb.uri= mongodb:...切换mongodb数据源 可以同一台机器,或者不同机器 实现动态插入 。 该例是根据companyId来处理

    SpringBoot+druid+多数据源示例

    基于SpringBoot框架,结合druid数据库连接池,实现多数据源自动切换的一个示例

    yy-conn:JDBC 数据库连接池,简单封装,可以连接多个数据源

    yy-connJDBC 数据库连接池,简单封装,可以连接多个数据源

    springboot2.x 多数据源

    2、支持为每个数据源分别配置连接池参数 3、注解 @TargetDataSource 更名为 @DataSource 4、支持类级别、方法级别、参数级别的动态数据源 5、将注解使用范围下沉到更接近SQL的 Mapper 层,可以完全避免在Service层...

    tomcat/resin使用全局数据库连接池资源

    我比较倾向于直接在web应用中配置数据库连接,例如使用struts或者是Hibernate的连接池,这样的好处是无需了解不同的应用服务器在配置数据源的差别,应用实施的时候比较简单。  所以我近的一些项目都是采用这种架构...

    连接池课件

    每次建立到数据源的连接,都需要一定的周期和...因为多用户的应用程序经常需要多个连接,所以到数据源的连接可能需要耗费大量资源。通过连接池,可以为再次使用保留可用的连接,这就提高了应用程序的性能和可缩放性。

    spring boot mybatis 多数据源与缓存.zip

    介绍MyBatis项目中如何配置多个数据源连接数据库,以及设置sql文的二级缓存功能,配置多数据源与数据连接池等功能。

    使用JAVA中的动态代理实现数据库连接池

    我们可以在互联网上找到很多关于数据库连接池的源程序,但是都发现这样一个共同的问题:这些连接池的实现方法都不同程度地增加了与使用者之间的耦合度。很多的连接池都要求用户通过其规定的方法获取数据库的连接,这...

    多数据源+数据库分库分表

    水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中,多数据源采用 mybatis-plus的dynamic-datasource 分库分表采用sharding-jdbc 数据库连接池管理是alibaba的druid-spring-boot-starter 项目使用...

    qingfeng:青锋管理系统是一个后台系统脚手架,使用springboot,layui前端框架,quartz定时任务,druid数据连接池,多数据源,代码生成等多种丰富的功能。具有菜单权限,功能(按钮)权限,数据权限做好很好的处理

    青锋管理系统是一个后台系统脚手架,使用springboot,layui前端框架,quartz定时任务,druid数据连接池,多数据源,代码生成等多种丰富的功能。具有菜单权限,功能(按钮)权限,数据权限做好很好的处理。 介绍 青锋...

    urllib3:一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。-python

    urllib3:一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。 urllib3 urllib3 是一个强大的、对 Python 友好的 HTTP 客户端。 许多 Python 生态系统已经使用 urllib3,您也应该使用。 urllib3 带来了 ...

    MongoDB_Golang.zip

    driver这两个比较常用的MongoDB基础库,做了连接池初始化,model层服务封装,提供:初始化MongoDB连接池复用, MongoDB集合(类似MySQL的数据表)的增、删、改、查,事务、管道操作、聚合操作、mongoShell原生命令...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    SpringBoot2 基础教程,日志配置,数据源配置,事务管理等

    多个拦截器配置和使用场景。引入JdbcTemplate,和多数据源配置。集成Druid连接池,配置监控界面。集成Redis数据库,实现缓存管理。集成JPA持久层框架,简化数据库操作。整合Mybatis框架,集成PageHelper分页。配置AOP切面...

    SQLDBX3.6汉化破解版

    能够同时操作打开多个数据库。 可以比较数据库差异,并保存输出为EXCEL或文件,支持快速配置数据库类型,管理ODBC数据库, ODBC用户数据源存储了如何与指定数据提供程序连接的信息。用户数据源只对当前用户可见,...

Global site tag (gtag.js) - Google Analytics