`
zhouxueliang
  • 浏览: 34603 次
  • 性别: 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的连接池管理要方便的多,更重要的是可控性更好,耦合性更低。
分享到:
评论

相关推荐

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

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

    Apache ShardingSphere分布式数据库中间层生态圈-其他

    支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。 支持任意实现JDBC规范的数据库,目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。 ShardingSphere-Proxy...

    Apache ShardingSphere 中文文档 分库分表

    Apache ShardingSphere 是一款开源的分布式数据库生态项目,由 JDBC 和 Proxy 两款产品组成。其核心采用微内核 + 可插拔架构,通过插件开放扩展功能。...• 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP

    基于SSM架构实现的大型分布式购物网站-B2C项目源码+项目说明.zip

    Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模...

    SpringBoot整合Druid应用的方法详解.docx

    Druid是目前Java语言中最好的数据库连接池之一。结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。Druid 是一个分布式的、支持实时多维 OLAP 分析的数据处理系统。它既支持高速的数据实时摄入处理,也支持...

    spring-boot-data-source-decorator:与p6spy,datasource-proxy,flexy-pool和spring-cloud-sleuth集成的Spring Boot

    添加连接池指标(jmx,codahale,dropwizard)和灵活的策略,以根据需要调整池大小 用于分布式跟踪的库(如果在classpath中找到)可启用jdbc连接和查询跟踪(仅适用于p6spy或datasource-proxy) 为什么不将...

    应用级产品开发平台APDPlat.zip

    19)、数据库连接池使用CommonsDBCP。 20)、Office文档操作使用POI。 21)、工作流使用Activiti。 22)、报表使用BIRT。 23)、Web资源优化使用wro4j。 24)、日志拦截使用AspectJ。 25)、上传备份文件到FTP使用...

    web开发常用jar

    DBCP数据库连接池 cglib-nodep-2.1_3.jar CGLIB是一个强大的高质量高性能的代码生成库,在运行时可以用它来扩展Java类 jfreechart-1.0.12.jar 使用java生成图表的工具 log4j-1.2.15.jar 通过使用Log4j,...

    java开发常用jar包

    DBCP数据库连接池 cglib-nodep-2.1_3.jar CGLIB是一个强大的高质量高性能的代码生成库,在运行时可以用它来扩展Java类 jfreechart-1.0.12.jar 使用java生成图表的工具 log4j-1.2.15.jar 通过使用Log4j,我们...

    sharding-jdbc:原始解析-源码解析

    分片JDBC-分片数据库和表的JDBC驱动程序 ... 连接池自适应。 支持DBCP,C3P0,BoneCP,Druid。 理论上,任何数据库都支持。 支持MySQL,Oracle,SQLServer和PostgreSQL。 5.配置 Java配置 Spring命名空间 Y

    sharding-jdbc-1.5.1:sharding-jdbc原始码解析

    分片JDBC-分片数据库和表的JDBC驱动程序 ... 连接池自适应。 支持DBCP,C3P0,BoneCP,Druid。 理论上,任何数据库都支持。 支持MySQL,Oracle,SQLServer和PostgreSQL。 5.配置 Java配置 Spring命名空间 Y

Global site tag (gtag.js) - Google Analytics