每次操作数据库都需要重新获取新连接,使用完毕后需close释放,频繁的创建和销毁造成资源浪费 连接的数量无法把控,对服务器造成巨大压力 连接池是数据库连接对象的缓冲区,通过配置,由连接池负责创建连接,管理连接,释放连接等操作 预先创建数据库连接放入连接池,用户在请求时,通过连接池直接获取连接,使用完毕后,将连接放回池中,避免了频繁的创建和销毁,同时解决了创建效率 当池中无连接可用,且达到上退时,连接池会新建连接 池中连接达到上限,用户请求会等待,可以设置超时时间 JDBC数据库连接池使用javax.sql.DataSource接口进行规范,所有的第三方连接池都实现此接口,自行添加具体实现,所有连接池获取连接和回收连接方法都一样,不同的只有性能和扩展功能 
  DBCP是Apache提供的数据库连接池,速度相对C3P0较快,但自身有一些Bug C3P0是一个开源组织提供的数据库连接池,速度相对较慢,稳定性比较好 Proxool是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点 Druid:阿里提供的数据库连接池,是集DBCP,C3P0,Proxool优点于一身的数据库连接池,性能,扩展性,易用性都更好,功能丰富 Hikari:是SpringBoot2.x之后内置的一款连接池,基于BoneCP做了不少改进和优化,口号是简单,快速,可靠   public  void  testHardCodeDruid ( )  throws  SQLException  { 
        
        String  url =  "jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true" ; 
        String  username =  "root" ; 
        String  password =  "123456" ; 
        
        DruidDataSource  dataSource =  new  DruidDataSource ( ) ; 
        
        dataSource. setDriverClassName ( "com.mysql.cj.jdbc.Driver" ) ; 
        dataSource. setUrl ( url) ; 
        dataSource. setUsername ( username) ; 
        dataSource. setPassword ( password) ; 
        
        dataSource. setInitialSize ( 10 ) ; 
        dataSource. setMaxActive ( 20 ) ;  
        
        Connection  connection =  dataSource. getConnection ( ) ; 
        System . out. println ( connection) ; 
        
        
        connection. close ( ) ; 
    } 
注:需要将resources文件夹标记为资源文件夹,否则通过getResourceAsStream获取时会获取不到 
driverName= com. mysql. cj. jdbc.  Driver= jdbc: mysql: / / 192.168 .29 .201 : 3306 / jdbc? rewriteBatchedStatements= true 
username= root
password= 123456 
initialSize= 10 
maxActive= 20 
    @Test 
    public  void  testSoftCodeDruid ( )  throws  Exception  { 
        
        Properties  properties =  new  Properties ( ) ; 
        
        InputStream  is =  DruidTest . class . getClassLoader ( ) . getResourceAsStream ( "db.properties" ) ; 
        properties. load ( is) ; 
        
        DataSource  dataSource =  DruidDataSourceFactory . createDataSource ( properties) ; 
        
        Connection  connection =  dataSource. getConnection ( ) ; 
        System . out. println ( connection) ; 
        
        connection. close ( ) ; 
    } 
需要引入两个包  
    @Test 
    public  void  testHardCodeHikari ( )  throws  SQLException  { 
        String  url =  "jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true" ; 
        String  username =  "root" ; 
        String  password =  "Lotus!1120" ; 
        
        HikariDataSource  dataSource =  new  HikariDataSource ( ) ; 
        
        dataSource. setDriverClassName ( "com.mysql.cj.jdbc.Driver" ) ; 
        dataSource. setJdbcUrl ( url) ; 
        dataSource. setUsername ( username) ; 
        dataSource. setPassword ( password) ; 
        
        dataSource. setMinimumIdle ( 10 ) ; 
        dataSource. setMaximumPoolSize ( 20 ) ;  
        
        Connection  connection =  dataSource. getConnection ( ) ; 
        System . out. println ( connection) ; 
        
        
        connection. close ( ) ; 
    } 
driverClassName= com. mysql. cj. jdbc.  Driver= jdbc: mysql: / / 192.168 .29 .201 : 3306 / jdbc? rewriteBatchedStatements= true 
username= root
password= Lotus ! 1120 
minimumIdle= 10 
maximumPoolSize= 20 
  @Test 
    public  void  testSoftCodeHikari ( )  throws  Exception  { 
        
        Properties  properties =  new  Properties ( ) ; 
        
        InputStream  is =  HikariTest . class . getClassLoader ( ) . getResourceAsStream ( "hikari.properties" ) ; 
        properties. load ( is) ; 
        
        HikariConfig  hikariConfig =  new  HikariConfig ( properties) ; 
        
        HikariDataSource  hikariDataSource =  new  HikariDataSource ( hikariConfig) ; 
        
        Connection  connection =  hikariDataSource. getConnection ( ) ; 
        System . out. println ( connection) ; 
        
        connection. close ( ) ; 
    }