前段时间因为一些原因在Java应用程序中用到了Proxool连接池,在网上查了一些资料,发现都是Web应用配合连接池的使用,刚刚也看到有人在问Java应用程序怎么使用连接池。恰好今天有时间,把相关东西整理一下,也许以后用得到。
开发环境 :eclipse 4.4.2 + JDK 1.6 + Proxool 0.9.1
连接池配置文件 proxool.xm至于详细配置信息以及各属性的作用,网上有详细说明,这里不再详细解释
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Pool</alias>
<driver-url>jdbc:mysql:///util</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value="root"/>
</driver-properties>
<maximum-connection-count>100</maximum-connection-count>
<minimum-connection-count>5</minimum-connection-count>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<maximum-new-connections>10</maximum-new-connections>
<prototype-count>10</prototype-count>
</proxool>
</something-else-entirely>
加载驱动以及获得连接的DbConn类
package net.guang.dbpool.conn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
/*
* Get Connection
*/
public class DbConn {
private static Connection conn;
public static Connection getConn() {
try {
//Java应用中先要加载配置文件,否则谁知道你配置给谁用,此处不支持相对路径
JAXPConfigurator.configure("D:\\eclipse\\eclipse_jee_workspace\\asiainfo\\dbutil\\src\\proxool.xml", false);
//1:注册驱动类,这次这个驱动已经不是Oracle的驱动了,是Proxool专用的驱动
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
//2:创建数据库连接,这个参数是一个字符串,是数据源的别名,在配置文件中配置的timalias,参数格式为:proxool.数据源的别名
conn = DriverManager.getConnection("proxool.Pool");
} catch (Exception e) {
e.printStackTrace();
}
return conn ;
}
/*
* 关闭结果集和连接
* Close Connection
*/
public void closeConn(ResultSet rs ,Connectionconn) {
try {
if (rs != null) {
rs.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
*测试和数据库连通性
*/
public static void main(String[] args) {
System.out.println(DbConn.getConn());
}
}
通过上面这个方法我们可以得到数据库的连接,其余的就和普通的JDBC操作数据库的方法一致
测试插入数据,这里我是使用了Apache的DbUtil,如果看不懂,可以采用JDBC的方式:
package net.guang.dbpool.model;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import net.guang.dbpool.conn.DbConn;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
public class DbModel {
ResultSetHandler<Object[]> rsh = new ResultSetHandler<Object[]>() {
public Object[] handle(ResultSet rs) throws SQLException {
if (!rs.next()) {
return null;
}
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
Object[] result = new Object[cols];
for (int i = 0; i < cols; i++) {
result[i] = rs.getObject(i + 1);
}
return result;
}
};
public void insertData() {
try {
// ProxoolDataSource ds = new ProxoolDataSource() ;
// ds.setDriverUrl("jdbc:mysql://127.0.0.1:3306/util");
// ds.setDriver("com.mysql.jdbc.Driver");
// ds.setUser("root");
// ds.setPassword("root");
QueryRunner run = new QueryRunner();
Connection conn = DbConn.getConn();
Long l = System.nanoTime();
String sql = "insert into user (id,name,age,sex) value (" + i + ",'张三',23,'男')";
run.update(conn, sql);
System.out.println(System.nanoTime() - l);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new DbModel().insertData();
}
}
以上是Proxool连接池在Java应用程序的的简单配置,有错误欢迎看到的提出来