`

动态数据源连接池

阅读更多

 


 动态数据源的实现源码

最近由于工作需要!需要有一个动态的连接池实现!上网找了很多!实现方法看似都很繁琐!所有自己就copy了一点点思想干脆自己写了一个!

做的是c3p0的连接池配置!所以请先下载相关的c3p0.jar包以及连接池包

/**
 * 该类是初始化连接池 或则得到连接
 * @author SkyWen
 *
 */
public class DynamicDataSourcePool {
 private static final Log log = LogFactory.getLog(DynamicDataSourcePool.class);
 private ComboPooledDataSource pool=null;//申明C3p0数据连接池变量
 /**
  * 默认的构造方法
  * @param userName  数据库用户名
  * @param pass      数据库密码
  * @param url       连接的url
  * @param driverClass  数据驱动
  */
 public DynamicDataSourcePool(String userName,String pass,String url,String driverClass) {
  try {
   this.pool=new ComboPooledDataSource();//创建对象
   this.pool.setDriverClass(driverClass);//设置驱动
   this.pool.setJdbcUrl(url); //设置连接的url
   this.pool.setUser(userName);//设置数据库用户名
   this.pool.setPassword(pass);//设置数据库密码
   this.pool.setAcquireIncrement(3);//当连接池中的连接耗尽的时候c3p0一次同时获取的连接数
   this.pool.setAutoCommitOnClose(false);//连接关闭时默认将所有未提交的操作回滚
   this.pool.setBreakAfterAcquireFailure(false);//获取连接失败后该数据源将申明已断开并永久关闭
   this.pool.setCheckoutTimeout(1000);//当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。
   this.pool.setIdleConnectionTestPeriod(60);//每60秒检查所有连接池中的空闲连接
   this.pool.setInitialPoolSize(10);//初始化时获取10个连接,取值应在minPoolSize与maxPoolSize之间
   this.pool.setMaxPoolSize(40);//连接池中保留的最大连接数
   this.pool.setMinPoolSize(5);//连接池最小连接数
   this.pool.setMaxIdleTime(60);//最大空闲时间,60秒内未使用则连接被丢弃
   this.pool.setNumHelperThreads(3);//c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能通过多线程实现多个操作同时被执行
   log.info("数据库连接池初始化成功");
  } catch (PropertyVetoException e) {
   e.printStackTrace();
  }
 }
    /**
    * 得到连接
    * @return
    */
 public Connection  getConnection(){
  try {
   return this.pool.getConnection();
  } catch (SQLException e) {
   log.info("获取连接异常");
   e.printStackTrace();
  }
  return null;
 }
 /**
  * 关闭
  */
 public void destroy(){
  if(null!=this.pool)this.pool.close();
 }
}

以上这个类是初始化连接池!下面DynamicDataSourcePoolFactory类是连接池的工厂

/**
 * 该类是连接池的管理类
 * @author SkyWen
 *
 */
public class DynamicDataSourcePoolFactory {
 private static Hashtable<String , DynamicDataSourcePool> hashtable=null;
 private static DynamicDataSourcePoolFactory dataSourcePoolFactory;
 private DynamicDataSourcePoolFactory(){
 }
 public static DynamicDataSourcePoolFactory getInstance(){
  if(null==dataSourcePoolFactory){
   hashtable=new Hashtable<String , DynamicDataSourcePool>();
   dataSourcePoolFactory=new DynamicDataSourcePoolFactory();
  }
  return dataSourcePoolFactory;
 }
 
 /**
  * 绑定连接池
  * @param key 连接池的名称必须唯一
  * @param dataSourcePool 对应的连接池
  */
 public void bind(String key,DynamicDataSourcePool dataSourcePool){
  if(IsBePool(key))getDynamicDataSourcePool(key).destroy();
  hashtable.put(key, dataSourcePool);
 }
 
 /**
  * 重新绑定连接池
  * @param key 连接池的名称必须唯一
  * @param dataSourcePool 对应的连接池
  */
 public void rebind(String key,DynamicDataSourcePool dataSourcePool){
  if(IsBePool(key))getDynamicDataSourcePool(key).destroy();
  hashtable.put(key, dataSourcePool);
 }
 
 /**
  * 删除动态数据连接池中名称为key的连接池
  * @param key
  */
 public void unbind(String key){
  if(IsBePool(key))getDynamicDataSourcePool(key).destroy();
  hashtable.remove(key);
 }
 
 /**
  * 查找动态数据连接池中是否存在名称为key的连接池
  * @param key
  * @return
  */
 public boolean IsBePool(String key){
  return hashtable.containsKey(key);
 }
 
 /**
  * 根据key返回key对应的连接池
  * @param key
  * @return
  */
 public DynamicDataSourcePool getDynamicDataSourcePool(String key){
  if(!IsBePool(key))return null;
  return (DynamicDataSourcePool)hashtable.get(key);
 
 }
}
下面这个类是个测试的类DynamicDataSourcePoolTest!我用的是mysql数据库!其中我只是添加了一个实例!可以自己在添加一个!如果有朋友不懂的话 请给我留言

String localurl="jdbc:mysql://127.0.0.1:3306/skywen?useUnicode=true&amp;characterEncoding=gbk";

DynamicDataSourcePool  dataSourcePool1=new DynamicDataSourcePool("aa","aa",localurl,"com.mysql.jdbc.Driver");

DynamicDataSourcePoolFactory factory=DynamicDataSourcePoolFactory.getInstance();

/*实体类的对象*/

GameServer gameServer=new GameServer();
  factory.bind(Key.getKey(gameServer), dataSourcePool1);

/*判读是否存在这个连接池*/
  System.out.println(factory.IsBePoolKey.getKey(gameServer));

 /*得到连接*/
  Connection connection161=factory.getDynamicDataSourcePool(Key.getKey(gameServer)).getConnection();

 

7
1
分享到:
评论

相关推荐

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

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

    springboot连接池、动态配置多数据源连接池,特别适合大数据部门、数据中台服务的多数据源连接池.zip

    最后,对于大数据部门和数据中台服务,这种动态数据源连接池的实现具有以下优势: - **灵活性**:可以轻松地添加、删除或修改数据源,无需重启服务。 - **高可用性**:根据业务负载,可以动态调整数据源的使用,...

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

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

    weblogic数据源连接池

    在企业级应用开发中,数据源连接池是关键组件之一,它能有效地管理数据库连接,提高系统的性能和可扩展性。WebLogic Server,作为Oracle公司的一款成熟的企业级应用服务器,提供了强大的数据源(DataSource)连接池...

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

    - **依赖引入**:在实现多数据源动态切换之前,需要在项目中引入Druid连接池的依赖。通常,这会是maven或gradle配置文件中添加对应版本的Druid依赖。 - **配置文件**(yml格式):在application.yml中配置多个数据...

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

    **JDBC数据源连接池配置与使用详解** 在Java Web应用中,数据库连接的管理是至关重要的。为了提高性能和资源利用率,开发人员通常会使用数据源连接池。本篇文章将详细讲解JDBC数据源连接池的配置和使用,以帮助你更...

    在GlassFish中配置数据源连接池

    GlassFish 数据源连接池配置 GlassFish 是一个开源的 Java EE 应用服务器,它提供了一个基于 Web 的管理接口,允许用户通过 Web 界面配置和管理服务器的各种设置。其中,配置数据源连接池是 GlassFish 的一个重要...

    java常用数据源连接池配置

    ### Java常用数据源连接池配置详解 #### 一、引言 在Java Web开发中,数据库连接管理是一项至关重要的任务。为了提高应用性能并确保资源的有效利用,通常会使用数据源连接池技术来管理和复用数据库连接。本文将详细...

    Hibernate的连接池和数据源配置

    Hibernate的三种连接池设置C3P0、Proxool和DBCP. 详细说明及配置方法 Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.

    数据源连接池的详细配置

    数据源连接池是数据库应用程序中的重要组成部分,它有效地管理和复用数据库连接,避免了频繁创建和销毁连接导致的性能开销。本配置教程将详细解析如何进行数据源连接池的设置,以提升应用的效率和稳定性。 首先,...

    Java动态代理实现数据源连接池

    但是,理解如何通过动态代理实现数据源连接池可以帮助我们更好地理解这种机制,并且在某些特定场景下,自定义实现可能会更加灵活。 首先,我们需要了解`InvocationHandler`接口。这个接口只有一个方法`invoke()`,...

    tomcat数据源连接池配置

    在Java Web应用中,Tomcat作为一款广泛应用的Servlet容器,其数据源连接池配置是确保高效、稳定数据库访问的关键步骤。本篇文章将详细介绍如何在Tomcat中配置数据源连接池,以及涉及的相关jar包文件。 首先,理解...

    数据源和连接池

    ### 数据源和连接池知识点详解 #### 一、概述 在现代Web开发中,数据库连接是极其宝贵的资源。尤其在高并发环境下,频繁地创建和销毁数据库连接会显著降低系统的性能。为此,开发者通常采用数据库连接池技术来优化...

    数据源连接池的-例子

    数据源连接池是Java应用程序中一个非常重要的概念,它能够有效地管理数据库连接,提高系统性能,减少资源浪费。本示例将介绍如何使用c3p0和JNDI(jtds组件)来实现数据库连接池。 首先,我们来看c3p0组件。c3p0是一...

    数据源连接池.zip

    数据源连接池是数据库管理中的一个关键概念,它在现代应用程序开发中扮演着至关重要的角色。数据源连接池,也称为数据库连接池,是一种管理数据库连接的技术,它通过复用已建立的数据库连接来提高应用性能,降低系统...

    Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

    3. **动态数据源连接池属性配置**: - 允许在运行时调整数据源的连接池属性,如最大连接数、最小空闲连接等,这样可以根据系统负载实时调整,优化资源使用。 4. **链式数据库切换**: - 使用双端队列(Deque)...

    Tomcat中配置数据源连接池

    在Java Web应用中,Tomcat作为一款流行的Servlet容器,提供了数据源连接池的配置功能,以便高效管理和复用数据库连接。本篇文章将详细介绍如何在Tomcat中配置数据源连接池,涉及的主要知识点包括: 1. **数据源配置...

    在WebLogic中建立数据库连接池与数据源及利用JBuilder进行测试

    ### 在WebLogic中建立数据库连接池与数据源及利用JBuilder进行测试 #### 摘要 本文将详细介绍如何在WebLogic Platform 8.1控制台中设置Oracle 9i、SQL Server 和 JDataStore 数据库连接池以及如何在应用程序中获取...

    c3p0数据源连接池的配置

    C3P0作为一款成熟、稳定的数据源连接池实现,被广泛应用于各种企业级应用中。本文将深入解析如何在Java Web项目中配置与使用C3P0数据源连接池。 ### 一、C3P0简介 C3P0(Concurrent Data Source Pooling for Java...

    Tomcat配置数据源连接池示例

    在IT行业中,服务器应用的性能优化是至关重要的,而数据源连接池的配置则是其中的一环。本示例主要关注如何在Apache Tomcat服务器中配置数据源连接池,以提高数据库访问的效率和稳定性。Tomcat作为一个流行的Java ...

Global site tag (gtag.js) - Google Analytics