`

jdbc----连接池和数据源

    博客分类:
  • JDBC
阅读更多

什么是数据源?
就是用来创建连接的,和DriverManager一样,只不过数据源(DataSource)
他的优势是:创建连接的速度快,通过DataSource创建的Connection是被包裹后的,他的close方法已经被修改,他close是放到池里面去,而数据源内部会有一个连接池,而我们的程序之和数据源打交道,不会直接访问到连接池,因为的池是包内有好,而我们的程序一般和开源组织提供的类肯定不是在同一个包下,所以我们访问不到。


public class MyDataSource{
  private static String url = "jdbc:mysql://localhost:3306/jdbc";
  private static String user = "root";
  private static pwd = "";
  private List<Connection> connsPool = new LinkedList<Connection>();
  
  public MyDataSource(){
    try{
	    for(int i=0;i<10;i++){
	       this.connsPool.addLast(this.createConnection()); //加到最后,这是先进先出的算法
	    }
    }catch(SQLException e){
       throw new ExceptionInInitializerError(e); //因为在初始化的时候就出现异常,这是很严重的,所以要让调用它的那层知道,所以需要向上抛
    }
  }
  
  public Connection getConnection(){
    return this.connsPool.removeFirst();//从前面拿到
  }
  
  
  private Connection createConnection() throws Exception{
     return DriverManager.getConnection(url,user,pwd);
  }
  
  public  void free(Connection conn){
     this.connsPool.addLast(conn);
  }
  
}


然后在jdbcUtils中加上一个属性,也就是让jdbcUtils问MyDataSource要连接

public Connection getConnection(){
  return myDataSource.getConnection();
}

public void free(Connection conn){
  return myDataSource.free(conn);
}



//---下面改造这个Conn,我们使用代理来完成这个工作,在连接池里面就创建出代理,然后我们的代理调用close方法是来把资源放回去

class MyConnection implements Connection{ //伪装成Conn
    Connection conn ;
    MyDataSource dataSource;
    MyConnection(Connection conn,MyDataSource dataSource){ //注意,如果不写public那么是包友好,这样的话,别人是拿不到MyConnection的
       this.conn = conn;
       this.dataSource = dataSource;
    }
    
    public void close(){
       this.dataSource.connsPool.addLast(this);
    }
    
    。。。。。
    
}

public class MyDataSource{
  private static String url = "jdbc:mysql://localhost:3306/jdbc";
  private static String user = "root";
  private static pwd = "";
  private static int initCount = 5;
  private static int maxCount = 10;
  private int currentCount = 0;
  private List<Connection> connsPool = new LinkedList<Connection>();
  
  public MyDataSource(){
    try{
	    for(int i=0;i<initCount;i++){
	       this.connsPool.addLast(this.createConnection()); 
	        currentCount ++;
	    }
    }catch(SQLException e){
       throw new ExceptionInInitializerError(e); 
    }
  }
  
  public Connection getConnection(){
     synchronized(connsPool){
        if(this.connsPool.size()>0){
    			return this.connsPool.removeFirst();
    		}else if(this.currentCount < maxCount){
    		  this.currentCount ++;
    		   return this.createConnection();
    		}
    		throw new SQLException("已经没有可用的连接");
    }
  }
  
  
  private Connection createConnection() throws Exception{
  	Connection conn = DriverManager.getConnection(url,user,pwd);
  	Connection conn = new MyConnection(conn,this); //把包装类给别人。。。。这个地方不同了
     return conn;
  }
  
  public  void free(Connection conn){   
     this.connsPool.addLast(conn);
  }
  
}

//---------------下面是开源的阿帕奇写的DBCP--------------------------------------

1.使用DBCP必须用的三个包
commons-dbcp-1.2.1.jar
commons-pool-1.2.jar
commons.collections-3.1.jar

2.配置--XX.properties

3.java API
BasicDataSourceFactory.createDataSource(prop);


分享到:
评论

相关推荐

    hive驱动包hive-jdbc-uber-2.6.5.0-292.jar(用户客户端连接使用)

    2. **配置Dbeaver**:在Dbeaver中,创建一个新的Hive数据源,然后在“Driver Settings”中选择或添加新的JDBC驱动,上传下载的JAR文件。 3. **设置连接参数**:填写Hive服务器的URL(例如,`jdbc:hive2://hostname:...

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

    - HikariCP:被誉为“最快的Java JDBC连接池”,以其高效和低延迟而闻名。 - Druid:阿里巴巴开源的数据库连接池,提供了监控和扩展功能,广泛应用于各种Java Web项目。 ### 3. 配置数据源连接池 以HikariCP为例,...

    jdbc-drivers.zip

    驱动文件通常为`mysql-connector-java.jar`,支持连接池配置、SSL连接等特性。 3. **H2 Database JDBC Driver (H2)**:H2是一个轻量级、高性能的开源嵌入式和服务器模式的SQL数据库,适用于测试和开发。其JDBC驱动...

    jdbc-oracle-thinjdbc-oracle-thin

    常见的连接池实现包括 HikariCP、C3P0 和 DBCP 等。 ##### 4.2 参数优化 对于大型应用,还可以通过调整数据库参数来进一步优化性能。例如,增加 `maxPoolSize` 参数以支持更多并发连接,或者调整 `maximumPoolSize...

    SQL2008--JDBC--jar

    4. **配置文件**:在Java EE应用中,通常需要在`web.xml`或者应用服务器的配置文件中指定JDBC驱动类和数据库连接信息,如数据源(DataSource)配置。例如,设置`driverClassName`为`...

    spring-jdbc-4.2.xsd.zip

    5. `&lt;jdbc:dataSource&gt;`:定义数据源,可以配置连接池信息,如C3P0、Apache DBCP、HikariCP等。 6. `&lt;jdbc:script&gt;`:执行SQL脚本,可以用于初始化数据库结构或数据。 7. `&lt;tx:annotation-driven&gt;`:启用基于注解的...

    java-jdbc-连接池大礼包

    Java JDBC 连接池大礼包包含了对数据库进行高效管理的必要知识,主要涉及Java数据库连接(JDBC)以及连接池的概念和技术。JDBC是Java语言访问数据库的标准接口,而连接池则是优化数据库操作的一种策略,它能提高应用...

    Tongweb5中配置JDBC连接池

    本文将详细介绍如何在Tongweb5中配置JDBC连接池,以及Web应用如何通过JNDI(Java Naming and Directory Interface)查找并使用这些数据源。 首先,我们需要了解JDBC连接池的基本原理。JDBC连接池是在应用启动时预...

    Weblogic JDBC 数据源配置和详细参数说明

    Weblogic JDBC 数据源配置和详细参数说明 一、JDBC 概述 ...本文详细介绍了 Weblogic 8.1 中 JDBC 数据源的配置和详细参数说明,包括连接池、数据源、JDBC 驱动程序设置、配置 JDBC 连接池等内容。

    JDBC-Drivers

    5. **JDBC连接池**: 在实际应用中,为了提高性能和资源利用率,通常会使用连接池来管理数据库连接。例如,C3P0、HikariCP、Apache DBCP等。连接池预先初始化一些数据库连接,当需要时可以从池中获取,用完后归还,...

    weblogic数据源连接池

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

    tomcat-jdbc-7.0.42.jar

    首先,Tomcat JDBC连接池是Apache Tomcat项目的一部分,它提供了对JDBC数据源的管理,旨在提高数据库连接的效率和资源利用率。在7.0.42版本中,该库已经相当成熟,能够有效地处理并发请求,提供各种性能调整选项,...

    java常用数据源连接池配置

    为了提高应用性能并确保资源的有效利用,通常会使用数据源连接池技术来管理和复用数据库连接。本文将详细介绍如何在Java Web应用中配置常用的数据库连接池,并通过具体示例来展示配置过程。 #### 二、数据源连接池...

    数据源和连接池

    2. **C3P0**: C3P0是一个强大的JDBC连接池管理工具包,提供了完整的JDBC连接池实现,支持JDBC 3 规范和JDBC 2 的标准扩展。 - **特点**: - 支持JNDI、支持XML配置文件。 - 内置缓存Statement功能。 - 支持连接...

    tomcat-jdbc数据源所需jar包tomcat-jdbc.jar+tomcat-juli.jar

    这个数据源是Tomcat内建的一种连接池,它在性能和内存管理上比标准的Java JDBC连接池更优秀,尤其适用于高并发的Web应用。 标题中提到的"tomcat-jdbc.jar"和"tomcat-juli.jar"是使用Tomcat-jdbc数据源所必需的两个...

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

    本项目——"spring-boot-easy-connection-pool-master",主要探讨了如何在Spring Boot环境下配置和管理连接池,并且实现了动态配置多数据源的功能,这对于大数据部门和数据中台服务尤其重要。 首先,让我们深入理解...

    oracle-jdbc-12.2.0.1.zip

    通过配置数据源,可以在应用服务器中实现连接池的管理。 3. **JDBC URL**: Oracle JDBC URL通常以`jdbc:oracle:thin:@`开头,后面跟随的是服务器主机名、端口号和服务名。例如,`jdbc:oracle:thin:@(DESCRIPTION=...

    jdbc.rar_jdbc_jdbc-odbc

    JDBC允许开发人员执行SQL语句、处理结果集、事务管理以及数据库连接池等操作。 ### JDBC基本概念 1. **Driver Manager**: 是JDBC的核心组件,负责管理数据库驱动,负责加载和注册数据库驱动。 2. **Driver**: 提供...

    sharding-jdbc-demo

    6. 使用Druid的数据源配置,设定连接池的基本参数,如最大连接数、最小空闲连接数等。 7. 编写业务代码,通过SpringBoot的@Autowired注解注入数据库操作对象,调用MyBatis的Mapper方法进行数据操作,Sharding-JDBC会...

    常用jdbc数据库连接jar包,数据库连接池jar包

    2. C3P0:这是一个开源的JDBC连接池,提供了比DBCP更高级的功能,如连接测试、空闲连接检测、自动扩展等。C3P0通过组合多个数据源来实现连接池,可以更好地控制并发和资源管理。 这些jar包的收集意味着开发者可以...

Global site tag (gtag.js) - Google Analytics