`
pedestrian_I
  • 浏览: 53463 次
  • 性别: 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连接池、动态配置多数据源连接池,特别适合大数据部门、数据中台服务的多数据源连接池.zip

    1. **配置数据源**:在`application.properties`或`application.yml`文件中,为每个数据源定义相应的属性,如URL、用户名、密码和驱动类名。 2. **创建数据源bean**:利用@ConfigurationProperties绑定配置文件中的...

    springboot-AOP实现多数据源动态切换(Druid连接池)

    该技术的关键在于如何在同一个应用中配置和使用多个数据源,以及如何在运行时根据上下文动态切换数据源。本知识点将围绕使用Spring AOP和Druid连接池来实现这一目标进行详细说明。 首先,要实现多数据源动态切换,...

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

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

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

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

    JDBC数据源连接池的配置和使用示例

    了解和掌握数据源连接池的配置和使用是每个Java开发者必备的技能。通过选择合适的连接池,配置合理的参数,以及有效利用监控工具,可以大大提高应用的性能和稳定性。在实际项目中,应根据具体需求选择合适的数据源,...

    tomcat数据源连接池配置

    数据源是一个接口,用于管理数据库连接,它提供了一种在多个线程或应用之间共享数据库连接的方式,避免了频繁创建和关闭连接导致的性能开销。在Tomcat中,我们通常使用内置的连接池实现,如Apache Commons DBCP或C3P...

    java 数据库 连接池驱动.rar

    - 创建数据源实例:根据选择的连接池库,初始化数据源对象。 - 获取和释放连接:通过数据源对象的getConnection()方法获取连接,使用完毕后调用Connection的close()方法,实际上将连接返回给连接池,而非真正关闭...

    mysql数据连接池

    5. **池化技术**:数据连接池采用池化技术,将数据库连接对象进行管理和调度,使得多个应用程序可以共享这些连接,避免了每次操作数据库都需要建立和断开连接的耗时过程。 在实际开发中,常见的MySQL数据连接池工...

    okhttp中连接池实现

    每个连接在被多个请求共享时,会进行同步控制,确保同一时刻只有一个请求在使用该连接,以避免数据冲突。 6. **超时设置**:OkHttp允许开发者自定义请求的超时时间,包括连接超时、读取超时和写入超时。这些超时...

    delphi实现数据库连接池

    这个过程需要注意控制并发,防止多个线程同时创建连接,可以使用锁(如TCriticalSection)来实现线程同步。 当应用需要一个数据库连接时,它会向连接池请求。这时,我们需要一个线程安全的获取连接的函数,它会检查...

    数据库连接池代码实现

    数据库连接池的概念是预先创建并维护一定数量的数据库连接,这些连接可以被多个应用程序线程复用,而不是每次需要时都去创建新的连接。这样不仅能减少数据库连接的创建和销毁开销,还能避免过多的并发连接导致数据库...

    自己封装的dbcp连接池封装,可以同时连接多个数据库

    在本项目中,您分享的是一个自定义封装的DBCP连接池,它具有同时连接多个数据库的功能。这个特性对于那些需要处理多种数据库的应用来说非常有用,例如数据集成、数据迁移或多数据源分析等场景。以下是对这个封装的...

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

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

    连接池源码和视频教程

    连接池,也称为数据库连接池,是一种在多线程应用程序中管理数据库连接的机制。它通过预创建并复用数据库连接来提高系统效率,避免了频繁地创建和关闭连接导致的性能损耗。连接池能够有效地减少数据库系统的负载,...

    Mongodb连接池for java

    描述中提到的“解决连接池不够的问题,多连接的问题”,意味着在实际项目开发中,可能会遇到因为数据库连接数量不足或者频繁创建和关闭连接导致的性能瓶颈。通过使用连接池,开发者可以在应用启动时预先分配一定数量...

    Springboot多连接池+websocket

    配置多个连接池意味着可以根据不同的业务需求,为不同的数据源设置不同的连接池,例如,对于读写频繁的操作可以配置高性能的连接池,而对于低频操作则可以选择更节省资源的连接池。这需要在`application.properties`...

    Java 连接池源码

    这两个操作都需要进行同步控制,防止多个线程同时操作同一连接。 3. **连接检查与回收**:连接池需要定期检查连接的有效性,例如通过执行一个简单的SQL语句来验证。如果发现无效的连接,需要从池中移除并创建新的...

    hibernate配置数据库连接池的三种方法

    C3P0是开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Hibernate中配置C3P0连接池,需要在`hibernate.cfg.xml`配置文件中添加以下属性: ```xml ...

    weblogic连接池配置数据库断掉重连的问题

    在 Weblogic 中,连接池配置是指将多个连接组合成一个池,以便于应用程序可以快速地获取连接。连接池配置可以提高应用程序的性能,减少与数据库的交互开销。 连接池配置包括两个主要部分:连接池和连接。连接池是指...

    C#高效数据库连接池源码

    - **线程安全**:在多线程环境下,连接池必须确保并发安全,防止数据竞争和同步问题。 6. **性能优化**: - **最小/最大连接数**:设置合适的最小和最大连接数,平衡资源使用和性能需求。 - **连接检测**:定期...

Global site tag (gtag.js) - Google Analytics