当前位置:Gxlcms > 数据库问题 > Java-自定义简单的mysql数据库连接池

Java-自定义简单的mysql数据库连接池

时间:2021-07-01 10:21:17 帮助过:12人阅读

  常用的连接池:
          1).DBCP连接池:Apache公司的免费、开源的连接池实现。Apache公司的Tomcat服务器内部就是采用的DBCP连接池。
          2).C3P0连接池:免费、开源的。在长时间运行的情况下,C3P0内部的资源释放方面的功能要比DBCP要强大。世界主流框架:Spring框架、Hibernate框架内部
     采用的就是C3P0连接池。

  按照这个原理,我自己写了一个简易的数据库连接池,考虑的不是很周全,仅供参考,有兴趣的朋友可以定义一个逻辑更加严谨的连接池。

  首先写一个配置文件,将连接数据库的信息写入配置文件:

  

1 driverClassName=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/student
3 username=root
4 password=123456

  自定义数据库连接池代码:

 1 package connectionpool;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 import java.util.LinkedList;
 7 import java.util.Properties;
 8 
 9 import javax.sql.DataSource;
10 
11 //创建一个自定义数据库连接池;
12 public class JDBCPool{
13     //通过LinkedList集合来存储Connection对象,用来模拟onnection对象的重复利用过程;
14     //初始化connection对象的个数;
15     //定义最大的连接对象;
16     //定义连接池最少需要留取的对象
17     private static LinkedList<Connection> link;
18     private static Properties p;
19     private static int initCount=5;
20     private static int maxCount=10;
21     private static int minCount=1;
22     //通过静态代码块来实现注册驱动;
23     static{
24          p= new Properties();
25         try {
26             p.load(JDBCPool.class.getClassLoader().getResourceAsStream("dpconfig.properties"));
27             Class.forName(p.getProperty("driverClassName"));
28             link = new LinkedList<Connection>();
29         } catch (Exception e) {
30             throw new RuntimeException();
31         }
32     
33     }
34     //通过构造方法来实现初始化的Connection对象的个数;
35     //我这里是初始化的Connection对象是5个;
36     public JDBCPool(){
37         for (int i = 0; i <initCount; i++) {
38             try {
39                 this.link.addFirst(this.createConnection());
40             } catch (SQLException e) {
41                 
42                 e.printStackTrace();
43             }
44         }
45     }
46     //创建Connection对象的方法,如果大于最小的创建好的Connection对象,就直接取出去;
47     //如果没有的话,就判断是否到达最大的连接数,没到达的话,就创建一个;
48     //我没有对不满足两种情况进行处理,有兴趣的朋友可以尝试一下;
49     private Connection getConnetion(){
50         synchronized(link){if(link.size()>minCount){
51             return link.removeFirst();
52         }if(link.size()<maxCount){
53             try {
54                 return this.createConnection();
55             } catch (SQLException e) {
56                 
57                 e.printStackTrace();
58             }
59         }
60         return null;
61         }
62     }
63     //用来创建Connection对象的
64     public Connection createConnection() throws SQLException{
65         return DriverManager.getConnection(p.getProperty("url"),p.getProperty("username"),p.getProperty("password"));
66     }
67     //回收时是将Connection取回到集合,并不是关闭
68     public void free(Connection conn){
69         this.link.addLast(conn);
70     }
71 }

 

  

Java-自定义简单的mysql数据库连接池

标签:drive   关闭   pack   private   .sql   catch   remove   source   hibernate   

人气教程排行