利用Spring 和DBCP实现分布式动态数据库连接池管理
来源:互联网 发布:开源电商系统 php 编辑:程序博客网 时间:2024/05/01 05:04
原文链接:http://blog.csdn.net/eagleking012/article/details/6853870
只要两步:
1、定义一个类MultiDataSourceBuilder实现ApplicationContextAware,在里面定义一个静态的获取SpringBean的方法。
2、配置Spring Bean配置,让Spring管理MultiDataSourceBuilder 和BasicDataSource
具体看以下代码文件。
- public class MultiDataSourceBuilder implements ApplicationContextAware{
- private static final Log log = LogFactory.getLog(MultiDataSourceBuilder.class);
- private static ApplicationContext ac = null;
- public static void setAC(ApplicationContext ctx){
- ac = ctx;
- }
- public static DataSource getSpringBeanDataSource(String beanName){
- while(ac == null){
- try {
- Thread.sleep(1000);
- System.out.println("DataBase is not ready,wait for 1s!");
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- if(beanName.startsWith("java:comp/env/jdbc/orcl")){
- beanName = beanName.substring(beanName.lastIndexOf("orcl"));
- return (DataSource)ac.getBean(beanName);
- }else if(beanName.startsWith("orcl")){
- return ((DataSource)ac.getBean(beanName));
- }
- }
- public void setApplicationContext(ApplicationContext applicationContext)
- throws BeansException {
- ac = applicationContext;
- }
- }
实现ApplicationContextAware接口的类,会由Spring自动调用setApplicationContext方法来设置applicationContext属性,不用再自己写代码设置。
接下来就是配置数据源Bean。
配置Spring bean 的配置文件是
- <bean id="MultiDataSourceBuilder" class="com.myself.dataSource.MultiDataSourceBuilder">
- </bean>
- <bean id="dataSourceAbstract" class="org.apache.commons.dbcp.BasicDataSource" abstract="true">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
- <property name="username"><value>username</value></property>
- <property name="password"><value>password</value></property>
- <property name="maxActive"><value>150</value></property>
- <property name="initialSize"><value>1</value></property>
- <property name="maxWait"><value>60000</value></property>
- <property name="maxIdle"><value>20</value></property>
- <property name="minIdle"><value>3</value></property>
- <property name="removeAbandoned"><value>true</value></property>
- <property name="removeAbandonedTimeout"><value>180</value></property>
- <property name="validationQuery"><value>select 1 from dual</value></property>
- <property name="connectionProperties"><value>clientEncoding=UTF-8</value></property>
- </bean>
- <!--以下配置数据库资源名称和连接URL-->
- <bean id="orcl201" destroy-method="close" parent="dataSourceAbstract">
- <property name="url" value="jdbc:oracle:thin:@192.168.1.201:1521:orcl" />
- </bean>
- <bean id="orcl205" destroy-method="close" parent="dataSourceAbstract">
- <property name="url" value="jdbc:oracle:thin:@192.168.1.205:1521:orcl" />
- </bean>
- <bean id="orcl209" destroy-method="close" parent="dataSourceAbstract">
- <property name="url" value="jdbc:oracle:thin:@192.168.1.209:1521:orcl" />
- </bean>
- <!--以上配置数据库资源名称和连接URL-->
- </beans>
Spring可以方便的抽取bean的公共属性定义在一个抽象bean中,其它bean只要配置父类引用即可。
这样就可以在程序中的任何地方,通过静态方法获取数据库连接池了。比tomcat的基于JNDI的连接池管理要方便的多,更重要的是可控性更好,耦合性更低。
0 0
- 利用Spring 和DBCP实现分布式动态数据库连接池管理
- 利用Spring 和DBCP实现分布式动态数据库连接池管理
- Spring配置DBCP数据库连接池
- Spring DBCP 数据库连接池配置
- Spring注入dbcp(数据库连接池)
- 数据库连接池c3p0和dbcp
- 数据库连接池DBCP和C3P0
- 数据库连接池c3p0和dbcp
- 数据库连接池DBCP和C3P0
- 数据库连接池c3p0和dbcp
- 数据库连接池c3p0和dbcp
- 数据库连接池 DBCP和c3p0数据库连接池
- log4j利用数据库连接池(dbcp)
- spring c3p0/dbcp等数据库连接池配置
- Spring配置c3p0、dbcp数据库连接池
- 数据库连接池c3p0和dbcp和tomcat-dbcp
- 数据库连接池--概述以及DBCP实现
- 数据库连接池——dbcp和c3p0
- 自动创建分区
- C# WebClient上传下载资料问题求助
- 菜花2
- 第六章 女人不世俗
- CUDA5.5入门文章:VS10设置
- 利用Spring 和DBCP实现分布式动态数据库连接池管理
- 远程连接到使用wifi的win7
- 菜花3
- 4A.Watermelon
- summary of android tutorials
- 读取html网页文件内容
- C++程序设计实践学材系列(24)——1.5.4 输出各种星号图
- 完美越狱,全设备6.1.3-6.1.5完美越狱正式发布!
- 安卓图表引擎AChartEngine