`
zhouxueliang
  • 浏览: 35460 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

利用Spring 和DBCP实现分布式动态数据库连接池管理

 
阅读更多
只要两步:

1、定义一个类MultiDataSourceBuilder实现ApplicationContextAware,在里面定义一个静态的获取SpringBean的方法。

2、配置Spring Bean配置,让Spring管理MultiDataSourceBuilder 和BasicDataSource

具体看以下代码文件。



[java] view plaincopyprint?
01.public class MultiDataSourceBuilder implements ApplicationContextAware{ 
02.    private static final Log log = LogFactory.getLog(MultiDataSourceBuilder.class); 
03.    private static ApplicationContext ac = null; 
04.    public static void setAC(ApplicationContext ctx){ 
05.        ac = ctx; 
06.    } 
07.    public static DataSource getSpringBeanDataSource(String beanName){ 
08.        while(ac == null){ 
09.            try { 
10.                Thread.sleep(1000); 
11.                System.out.println("DataBase is not ready,wait for 1s!"); 
12.            } catch (InterruptedException e) { 
13.                 
14.                e.printStackTrace(); 
15.            } 
16.        } 
17.         
18.        if(beanName.startsWith("java:comp/env/jdbc/orcl")){ 
19.            beanName = beanName.substring(beanName.lastIndexOf("orcl")); 
20.            return (DataSource)ac.getBean(beanName); 
21.        }else if(beanName.startsWith("orcl")){ 
22.            return ((DataSource)ac.getBean(beanName)); 
23.        } 
24.    } 
25. 
26.    public void setApplicationContext(ApplicationContext applicationContext) 
27.            throws BeansException { 
28.        ac = applicationContext;     
29.    } 



[java] view plaincopyprint?
01.} 

实现ApplicationContextAware接口的类,会由Spring自动调用setApplicationContext方法来设置applicationContext属性,不用再自己写代码设置。

接下来就是配置数据源Bean。

配置Spring bean 的配置文件是



[html] view plaincopyprint?
01.<bean id="MultiDataSourceBuilder" class="com.myself.dataSource.MultiDataSourceBuilder"> 
02.</bean> 
03.<bean id="dataSourceAbstract" class="org.apache.commons.dbcp.BasicDataSource" abstract="true">  
04.    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />     
05.    <property name="username"><value>username</value></property>    
06.    <property name="password"><value>password</value></property>    
07.    <property name="maxActive"><value>150</value></property>    
08.    <property name="initialSize"><value>1</value></property>    
09.    <property name="maxWait"><value>60000</value></property>    
10.    <property name="maxIdle"><value>20</value></property>    
11.    <property name="minIdle"><value>3</value></property>    
12.    <property name="removeAbandoned"><value>true</value></property>    
13.    <property name="removeAbandonedTimeout"><value>180</value></property> 
14.    <property name="validationQuery"><value>select 1 from dual</value></property> 
15.    <property name="connectionProperties"><value>clientEncoding=UTF-8</value></property>    
16.</bean> 
17.<!--以下配置数据库资源名称和连接URL--> 
18.<bean id="orcl201"  destroy-method="close" parent="dataSourceAbstract">         
19.    <property name="url" value="jdbc:oracle:thin:@192.168.1.201:1521:orcl" />       
20.</bean> 
21.<bean id="orcl205"  destroy-method="close" parent="dataSourceAbstract">      
22.    <property name="url" value="jdbc:oracle:thin:@192.168.1.205:1521:orcl" />    
23.</bean> 
24.<bean id="orcl209" destroy-method="close" parent="dataSourceAbstract">       
25.    <property name="url" value="jdbc:oracle:thin:@192.168.1.209:1521:orcl" />    
26.</bean> 
27.<!--以上配置数据库资源名称和连接URL--> 
28.</beans> 

Spring可以方便的抽取bean的公共属性定义在一个抽象bean中,其它bean只要配置父类引用即可。



这样就可以在程序中的任何地方,通过静态方法获取数据库连接池了。比tomcat的基于JNDI的连接池管理要方便的多,更重要的是可控性更好,耦合性更低。
分享到:
评论

相关推荐

    durid数据库连接池的使用方式,定义了工具类,可以通过durid方式访问数据库,实现对数据库的添加

    Durid,全称为 Distributed Universal JDBC,是阿里巴巴开源的一个高性能、分布式、可扩展的数据库连接池组件。它在设计上借鉴了C3P0、DBCP等成熟的数据源管理方案,并在此基础上进行了优化和增强,提供了更强大的...

    druid数据库连接池

    在Java应用程序中,数据库连接池是管理数据库连接的重要工具,它可以显著提高应用的性能和资源利用率。Druid因其出色的监控能力、强大的过滤器机制以及良好的性能而备受青睐。 1. **简介** Druid数据库连接池提供...

    Java 连接池实现

    总的来说,Java连接池是提高数据库应用性能的重要工具,通过合理配置和选择合适的连接池实现,我们可以有效地管理和利用数据库连接,减少系统资源的消耗,提升整体系统的响应速度和稳定性。对于开发者来说,理解和...

    数据库连接池

    数据库连接池是现代应用程序开发中的一个关键组件,它在提高应用程序性能、管理和优化数据库资源方面起着重要作用。本文将深入探讨数据库连接池的概念、工作原理、常见实现以及如何在Java中使用。 首先,理解数据库...

    spring 数据库动态切换

    在实际应用中,我们通常会使用如Apache Commons DBCP或HikariCP这样的连接池实现。在配置文件中,我们可以定义多个DataSource实例,每个对应一个不同的数据库。 要实现数据库动态切换,我们需要以下步骤: 1. **...

    c3p0 还有其他连接池

    1. **Apache DBCP**:Apache Commons DBCP是Apache软件基金会提供的一个通用的数据库连接池组件,它基于Jakarta-Commons-Pool库进行连接管理。 2. **HikariCP**:HikariCP是目前公认的性能最佳的连接池,其设计目标...

    Spring2.5实现事务管理(本地事务、分布式事务).doc

    数据源(dataSource)是指对数据库的连接,在这个例子中,我们使用 Apache Commons DBCP 库来管理数据库连接池。 事务管理器(txManager)是指 Spring 框架提供的事务管理器,它负责管理事务的提交、回滚和重试。 ...

    ssh 整合连接池

    Spring通过Bean配置或Java配置方式,可以将连接池集成到应用中,并且可以在Spring的事务管理中透明地使用连接池,从而实现数据库连接的自动获取和释放。 以下是SSH整合连接池的基本步骤: 1. 添加连接池依赖:在...

    java c/s结构连接池

    在实际开发中,C/S结构的数据库连接池可能会使用第三方库,如Apache的Commons DBCP或C3P0,或者Spring框架中的DataSource,它们提供了更为强大和完善的连接池管理功能,包括连接超时、最大连接数、最小连接数、空闲...

    完整版Java web开发教程PPT课件 Java开发进阶教程 第20章 数据库连接池,缓存(共15页).pptx

    常见的数据库连接池有C3P0、Apache DBCP、HikariCP和Druid等。 缓存则是提升应用性能的另一个关键手段。在Java Web开发中,缓存通常用于存储经常访问但更新不频繁的数据,如用户信息、商品详情等,以减少对数据库的...

    dbcp数据源.rar

    Apache DBCP (Database Connection Pool) 是一个开源的数据库连接池组件,它在Java应用中广泛使用,特别是在基于Spring框架的项目中,为应用程序提供高效、可靠的数据库连接管理。DBCP是Apache Commons项目的一部分...

    Spring数据源链接所需的jar包

    7. `commons-dbcp.jar`或`commons-pool.jar` - 如果使用DBCP(Apache Commons DBCP)作为数据源,这两个jar包是必需的,它们提供了数据库连接池的功能。 在实际开发中,你需要根据项目所使用的数据库类型和Spring...

    Spring jar

    总结来说,这个压缩包文件的内容显示了这是一个基于Spring 2.5.5版本的应用,依赖于ActiveMQ进行消息传递,使用DBCP进行数据库连接池管理,并利用Commons Pool来优化资源的使用。这样的配置在分布式系统或需要高并发...

    DBPool_v4.8.3 source

    此外,对于大型分布式系统,可能还需要考虑分布式连接池,如Hazelcast Jet或Redisson的实现。 总之,DBPool_v4.8.3 source提供了深入理解数据库连接池工作原理的机会,对于提升软件开发人员在数据库管理和优化方面...

    druid-1.1.9 连接池jar包

    Druid连接池是阿里巴巴开源的一款高性能数据库连接池组件,它的全称是Dynamic Routing Data Source,即动态数据源。在1.1.9这个正式版本中,Druid已经经过了大规模的压力测试,确保了其稳定性和性能,是许多企业级...

    java配置多数据库

    总结来说,"Java配置多数据库"涉及的关键技术包括Tomcat连接池、数据库连接池的配置与管理、Spring框架的IoC和AOP,以及数据库操作接口的设计与实现。通过这些技术,开发者可以有效地在同一个应用中对多个数据库进行...

    Druid数据库分析工具

    **Druid数据库分析工具** ...总结,Druid是一个强大且全面的数据库管理工具,尤其在数据库连接池管理、SQL监控和性能优化方面表现出色。在Java开发中,合理使用Druid可以显著提升系统性能,降低维护成本。

    spring框架开发相关jar包

    Spring与Mybatis的整合可以利用Spring的IOC和AOP特性,让Mybatis的Mapper接口和SqlSession管理更加方便,同时保持Mybatis的灵活性。 6. **Spring-Json** 这可能是Spring对JSON数据处理的支持,比如使用Jackson或...

    dbcp 连接池不合理的锁导致连接耗尽解决方案

    4. **使用更先进的连接池**:尽管DBCP是一个成熟的连接池实现,但随着技术的发展,像HikariCP、Druid等现代连接池库提供了更好的性能和稳定性,可以考虑替换使用。 5. **监控和报警**:设置合适的监控指标,如连接池...

    spring_JDBC整合包

    在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个"spring_JDBC基本包"可能包含的文件有Spring框架的基础库,如spring-jdbc.jar,数据库驱动如mysql-connector-java....

Global site tag (gtag.js) - Google Analytics