使用XML配置c3p0數(shù)據(jù)庫連接池
本文實(shí)例為大家分享了使用XML配置c3p0數(shù)據(jù)庫連接池的具體代碼,供大家參考,具體內(nèi)容如下
想通過JDBC來配置c3p0數(shù)據(jù)庫連接池,上網(wǎng)想找到解析工具沒有找到,只要自己寫了一個(gè),可以讀取在根目錄下的c3p0配置文檔,再根據(jù)配置信息來反射ComboPooledDataSource 中的setter進(jìn)行連接池的配置。
本人水平很菜,如果有什么不足請大家指出。
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的數(shù)據(jù)庫連接池
*
* @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"); // 得到一個(gè)map包含配置信息
ds = new ComboPooledDataSource(); // 得到一個(gè)數(shù)據(jù)庫連接池?cái)?shù)據(jù)源
Method[] fs = ComboPooledDataSource.class.getMethods(); // 得到該數(shù)據(jù)庫連接池?cái)?shù)據(jù)源的所以方法信息
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,那么無法反射到該犯法,反射調(diào)用方法無法自動解包
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"));
}
/**
* 得到一個(gè)數(shù)據(jù)庫連接
*
* @return 數(shù)據(jù)庫連接
*/
public static synchronized Connection getConnection() {
Connection con = null;
try {
con = ds.getConnection();
} catch (SQLException e1) {
e1.printStackTrace();
}
return con;
}
/**
* 關(guān)閉數(shù)據(jù)庫(并沒有真正的關(guān)閉,連接池把連接存儲起來下一次調(diào)用的時(shí)候還可以使用)
* @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();
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java使用C3P0數(shù)據(jù)源鏈接數(shù)據(jù)庫
- 數(shù)據(jù)庫連接池c3p0配置_動力節(jié)點(diǎn)Java學(xué)院整理
- Java數(shù)據(jù)庫連接池之c3p0簡介_動力節(jié)點(diǎn)Java學(xué)院整理
- Spring通過c3p0配置bean連接數(shù)據(jù)庫
- 使用c3p0連接數(shù)據(jù)庫實(shí)現(xiàn)增刪改查
- JDBC利用C3P0數(shù)據(jù)庫連接池連接數(shù)據(jù)庫
- spring boot整合mybatis使用c3p0數(shù)據(jù)源連接mysql
- C3P0連接池+MySQL的配置及wait_timeout問題的解決方法
- Java數(shù)據(jù)庫連接池c3p0過程解析
相關(guān)文章
IDEA中Web項(xiàng)目控制臺亂碼的問題及解決方法
這篇文章主要介紹了IDEA中Web項(xiàng)目控制臺亂碼的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Java 中ConcurrentHashMap的實(shí)現(xiàn)
本文主要介紹Java 中ConcurrentHashMap的實(shí)現(xiàn),這里整理了詳細(xì)的資料,及簡單實(shí)例代碼,有興趣的小伙伴可以參考下2016-09-09
IntelliJ IDEA maven 構(gòu)建簡單springmvc項(xiàng)目(圖文教程)
在工作當(dāng)中,我們有時(shí)需要創(chuàng)建一個(gè)全新的工程,而基于spring-mvc web的工程較為常見,這篇文章主要介紹了IntelliJ IDEA maven 構(gòu)建簡單springmvc項(xiàng)目(圖文教程),感興趣的小伙伴們可以參考一下2018-05-05
關(guān)于二分法查找Java的實(shí)現(xiàn)及解析
這篇文章主要介紹了關(guān)于二分法查找Java的實(shí)現(xiàn)及解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
SpringBoot整合Mybatis注解開發(fā)的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot整合Mybatis注解開發(fā)的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
SpringBoot全局異常處理之多個(gè)處理器匹配順序(最新推薦)
這篇文章主要介紹了SpringBoot全局異常處理之多個(gè)處理器匹配順序(最新推薦),調(diào)試源碼可見匹配順序?yàn)椋寒惓蛹壐哒邇?yōu)先,再清楚點(diǎn),子類異常處理器優(yōu)先,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-03-03

