数据库连接池可以通过两种方式来应用,针对web应用和非web应用而来。
非web应用的数据库连接池配置
第一种方式:工厂类
非web应用可以使用工厂模式将数据库连接创建封装在一个工具类中,工具类中又使用单例模式来创建加载驱动,代码如下:
工厂类:ConnectPoolFactory.java
1 importjava.io.InputStream;2 importjava.sql.Connection;3 importjava.sql.DriverManager;4 importjava.util.Properties;5
6 importorg.logicalcobwebs.proxool.configuration.PropertyConfigurator;7
8 public classConnectPoolFactory {9
10 private static ConnectPoolFactory connectPoolFactory=null;11
12 private ConnectPoolFactory() {//构造方法
13 init();14 }15
16 public void init(){//把properties文件加载到链接对象
17 InputStream is = ConnectPoolFactory.class.getResourceAsStream("/proxool.properties");18 Properties properties = newProperties();19 try{20 properties.load(is);21 PropertyConfigurator.configure(properties);22 } catch(Exception e) {23 e.printStackTrace();24 }25 }26
27 public static ConnectPoolFactory getInstance(){//单例模式
28 if(null ==connectPoolFactory){29 connectPoolFactory = newConnectPoolFactory();30 }31
32 returnconnectPoolFactory;33 }34
35
36 publicConnection getConnect(){37 Connection conn=null;38 try{39 Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");// 加载数据库连接池配备的驱动40 conn = DriverManager.getConnection("proxool.test");//proxool为配置文件名,test为连接池别名41 } catch(Exception e) {42 e.printStackTrace();43 }44 returnconn;45 }46
47 }
配置文件:proxool.properties
1 jdbc-1.proxool.alias=test2 #jdbc-1.proxool.driver-class=oracle.jdbc.OracleDriver3 #jdbc-1.proxool.driver-url=jdbc:oracle:thin:@127.0.0.1:1521:orcl4 jdbc-1.proxool.driver-class=com.mysql.jdbc.Driver5 jdbc-1.proxool.driver-url=jdbc:mysql://localhost:3306/db_course6 jdbc-1.user=root7 jdbc-1.password=root8
9 jdbc-1.proxool.maximum-connection-count=810 jdbc-1.proxool.minimum-connection-count=511 jdbc-1.proxool.prototype-count=412 jdbc-1.proxool.verbose=true13 jdbc-1.proxool.statistics=10s,1m,1d14 jdbc-1.proxool.statistics-log-level=error
然后通过工厂类创建工厂对象,通过工厂对象获取连接池实例,通过实例创建连接
测试类:ProxoolTest.java
1 public classProxoolTest {2 public static voidmain(String[] args) {3 ConnectPoolFactory factory =ConnectPoolFactory.getInstance();4 Connection connect =factory.getConnect();5 System.out.println("ProxoolTest.main(conncet): " +connect);6 }7 }
第二种方式:工具类中加载
工具类:DBUtil.java
1 public classDBUtil {2 static{3 InputStream is = DBUtil.class
4 .getResourceAsStream("/proxool.properties");5 Properties properties = newProperties();6 try{7 properties.load(is);8 PropertyConfigurator.configure(properties);9 } catch(Exception e) {10 e.printStackTrace();11 }12 }13
14 /**
15 * 获取数据库连接16 *17 *@return
18 */
19 public staticConnection getConn() {20 Connection conn = null;21 try{22 Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");23 conn = DriverManager.getConnection("proxool.test");24 } catch(SQLException e) {25 e.printStackTrace();26 } catch(ClassNotFoundException e) {27 e.printStackTrace();28 }29 returnconn;30 }31
32 /**
33 * 获取sql语句发送器34 *35 *@paramconn36 *@return
37 */
38 public staticStatement getStmt(Connection conn) {39 Statement stmt = null;40 try{41 stmt =conn.createStatement();42 } catch(SQLException e) {43 e.printStackTrace();44 }45 returnstmt;46 }47
48 /**
49 * 获取预处理发送器50 *51 *@paramconn52 *@paramsql53 *@return
54 */
55 public staticPreparedStatement getPstmt(Connection conn, String sql) {56 PreparedStatement pstmt = null;57 try{58 pstmt =conn.prepareStatement(sql);59 } catch(SQLException e) {60 e.printStackTrace();61 }62 returnpstmt;63 }64
65 /**
66 * 动态绑定参数67 *68 *@parampstmt69 *@paramparams70 */
71 public static voidbindParam(PreparedStatement pstmt, Object... params) {72 for (int i = 0; i < params.length; i++) {73 try{74 pstmt.setObject(i + 1, params[i]);75 } catch(SQLException e) {76 e.printStackTrace();77 }78 }79 }80
81 /**
82 * 关闭资源83 *@paramautoCloseables 实现了AutoCloseable接口的实现类对象84 */
85 public static voidcloseAll(AutoCloseable...autoCloseables) {86 for(AutoCloseable autoCloseable : autoCloseables) {87 if(autoCloseable!=null){88 try{89 autoCloseable.close();90 } catch(Exception e) {91 e.printStackTrace();92 }93 }94 }95 }96 }
在web应用中使用数据库连接池
proxool.properties配置文件是不可少的,但是DBUtil.java中的静态代码块就不再需要了。
不过要在web.xml中添加如下代码:
1
2
3 servletConfigurator
4 org.logicalcobwebs.proxool.configuration.ServletConfigurator
5
6 propertyFile
7 WEB-INF/classes/proxool.properties
8
9 1
10
11
12
13
14 adminServlet
15 org.logicalcobwebs.proxool.admin.servlet.AdminServlet
16
17
18 adminServlet
19 /admin
20
其中/admin用来配置访问监控连接池页面