使用XML配置c3p0數據庫連接池
更新時間:2019年08月21日 11:00:12 作者:iteye_6437
這篇文章主要為大家詳細介紹了使用XML配置c3p0數據庫連接池,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了使用XML配置c3p0數據庫連接池的具體代碼,供大家參考,具體內容如下
想通過JDBC來配置c3p0數據庫連接池,上網想找到解析工具沒有找到,只要自己寫了一個,可以讀取在根目錄下的c3p0配置文檔,再根據配置信息來反射ComboPooledDataSource 中的setter進行連接池的配置。
本人水平很菜,如果有什么不足請大家指出。
package cn.vagasnail.sgms.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 得到c3p0的數據庫連接池
*
* @author vagasnail
*
* 2009-3-26 下午07:54:10
*/
public class C3p0ConnectionFactory {
private C3p0ConnectionFactory() {
}
private static ComboPooledDataSource ds = null;
static {
Map<String, String> configs = C3p0XMLParser
.parserXML("c3p0-config.xml"); // 得到一個map包含配置信息
ds = new ComboPooledDataSource(); // 得到一個數據庫連接池數據源
Method[] fs = ComboPooledDataSource.class.getMethods(); // 得到該數據庫連接池數據源的所以方法信息
Pattern pattern = Pattern.compile("get([A-Z]\\w+)()");
for (Method m : fs) {
Matcher matcher = pattern.matcher(m.getName());
String str = "";
String strLow = "";
if (matcher.find()) {
str = matcher.group(1);
char c = str.charAt(0);
strLow = Character.toLowerCase(c) + str.substring(1);
}
try {
String value = configs.get(strLow);
int intValue = 0;
Method setMod = null;
if (value != null && !"".equals(value)){
try{
intValue = Integer.parseInt(value);
setMod = ComboPooledDataSource.class.getMethod("set"
+ str, int.class); //如果反射的方法中是int類型,而不是包裝類Interger,那么無法反射到該犯法,反射調用方法無法自動解包
if(setMod != null)
setMod.invoke(ds, intValue);
}catch(NumberFormatException nfe){
setMod = ComboPooledDataSource.class.getMethod("set"
+ str, String.class);
if(setMod != null)
setMod.invoke(ds, value);
}
}else
continue;
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
// e.printStackTrace(); //如果方法不存在則繼續(xù)下面的循環(huán)
continue;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
login(configs);
}
private static void login(Map<String, String> configs){
ds.setUser(configs.get("user"));
ds.setPassword(configs.get("password"));
}
/**
* 得到一個數據庫連接
*
* @return 數據庫連接
*/
public static synchronized Connection getConnection() {
Connection con = null;
try {
con = ds.getConnection();
} catch (SQLException e1) {
e1.printStackTrace();
}
return con;
}
/**
* 關閉數據庫(并沒有真正的關閉,連接池把連接存儲起來下一次調用的時候還可以使用)
* @param conn
* @throws SQLException
*//*
public static synchronized void close(Connection conn) {
if (conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
return;
}
}
}*/
public static int getCurrentConns() throws SQLException{
return ds.getNumConnectionsAllUsers();
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Intellij IDEA中如何查看maven項目中所有jar包的依賴關系圖
這篇文章主要介紹了Intellij IDEA中如何查看maven項目中所有jar包的依賴關系圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05
Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系
這篇文章主要為大家詳細介紹了Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
基于SpringBoot集成測試遠程連接Redis服務的教程詳解
這篇文章主要介紹了基于SpringBoot集成測試遠程連接的Redis服務的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

