JDBC数据库连接池的简单实现、读取资源配置文件、不是太完善、请多提建议。。。
- 资源文件conn.properties
conn.driver=com.mysql.jdbc.Driver conn.url=jdbc:mysql://localhost:3306/test conn.user=root conn.password=xxm conn.minCon=30 conn.maxCon=100
- 连接数据库的工具类DbCon.java
package com.xxm.utils; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import java.util.ResourceBundle; import java.util.Vector; /** * 池化连接 * @author D-xxm */ public class DbCon { private static String className = null; private static String url = null; private static String user = null; private static String password = null; private static int minCon = 3; // 最小连接数 private static List<Connection> listCon = new Vector<Connection>(); // 连接池 /** * 初始化连接池 */ static { loadProperties(); try { for (int i = 0; i < minCon; i++) { listCon.add(getCon()); } } catch (SQLException e) { System.out.println("---------------初始化资源连接失败!---------------"); e.printStackTrace(); } System.out.println("---------------初始化"+listCon.size()+"个资源连接!---------------"); } /** * 读取资源文件配置、加载驱动 * @throws IOException * @throws ClassNotFoundException */ private static void loadProperties() { ResourceBundle rb; try { rb = ResourceBundle.getBundle("conn"); className = rb.getString("conn.driver"); url = rb.getString("conn.url"); user = rb.getString("conn.user"); password = rb.getString("conn.password"); String smin = rb.getString("conn.minCon"); if ((smin != null) && (!("".equals(smin.trim())))) minCon = Integer.valueOf(smin).intValue(); Class.forName(className); } catch (Exception e) { System.out.println("---------------读取资源文件异常!--------------"); className = "com.mysql.jdbc.Driver"; url = "jdbc:mysql://localhost:3306/demo"; user = "root"; password = "xxm"; try { Class.forName(className); } catch (Exception e2) { System.out.println("---------------加载驱动异常!--------------"); e2.printStackTrace(); } } } /** * 获取数据库连接。。。 * @return * @throws SQLException */ private static Connection getCon() throws SQLException { System.out.println("---------------新建连接资源!---------------"); if ((className == null) || (url == null) || (password==null)) loadProperties(); return DriverManager.getConnection(url, user, password); } /** * 在连接池里拿取连接、如果没有了、调用方法新建连接 * @return * @throws SQLException*/ public static Connection getConnection() throws SQLException { if ((listCon != null) && (listCon.size() > 0)) return listCon.remove(listCon.size() - 1); return getCon(); } /** * 当连接小于最小连接数时、将连接放入连接池、否则关闭数据库连接 * @param con * @throws SQLException */ public static void closeConnection(Connection conn) throws Exception { if ((conn != null) && (!(conn.isClosed()))) if ((listCon != null) && (listCon.size() < minCon)) listCon.add(conn); else conn.close(); } /** * 测试方法 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { for (int i = 0; i < 40; ++i) { Connection conn = getConnection(); System.out.println(conn); } System.out.println(listCon.size()); } }