package com.laoxu.test.day04.c3p0DBSource;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* C3P0数据源测试类
*
*/
public class C3P0DBSTest {
/*
* 因为使用maven管理,因此路径在使用File时不带src/main/... 显示false
*/
private static final String DB_CONFIG_URL = "com/laoxu/test/day04/c3p0DBSource/DBConfig.properties";
private static String driver = "";
private static String url = "";
private static String username = "";
private static String password = "";
private static String acquireRetryAttempts = "";// 定义从数据库创建连接失败重复尝试的时间。default:30
private static String acquireRetryDelay = "";// 两次连接间隔时间.default:1000
private static String autoCommitOnClose = "";// 连接关闭时默认将所有未提交的操作回滚。Default:false
private static String automaticTestTable = "";// c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。Default:null
private static String breakAfterAcquireFailure = "";// 获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
// 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
// 获取连接失败后该数据源将申明已断开并永久关闭。Default: false
private static String idleConnectionTestPeriod = "";// 每60秒检查所有连接池中的空闲连接。Default:
// 0
private static String initialPoolSize = "";// 初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default:
// 3
private static String maxIdleTime = "";// 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default:
// 0
private static String maxPoolSize = "";// 接池中保留的最大连接数。Default: 15
private static String numHelperThreads = "";// c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能
// 通过多线程实现多个操作同时被执行。Default: 3
private static ComboPooledDataSource cpds;//c3p0数据源
/*
* 静态块,加载数据源配置
*/
static {
System.out.println("-----------加载静态块--------------");
Properties prop = new Properties();
InputStream is = C3P0DBSTest.class.getClassLoader()
.getResourceAsStream(DB_CONFIG_URL);
try {
prop.load(is);
url = prop.getProperty("url");
driver = prop.getProperty("driver");
username = prop.getProperty("username");
password = prop.getProperty("password");
maxPoolSize = prop.getProperty("maxPoolSize");
numHelperThreads = prop.getProperty("numHelperThreads");
initialPoolSize = prop.getProperty("initialPoolSize");
cpds = new ComboPooledDataSource();
cpds.setJdbcUrl(url);
try {
cpds.setDriverClass(driver);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
cpds.setUser(username);
cpds.setPassword(password);
cpds.setInitialPoolSize(Integer.valueOf(initialPoolSize));
cpds.setMaxPoolSize(Integer.valueOf(maxPoolSize));
cpds.setNumHelperThreads(Integer.valueOf(numHelperThreads));
} catch (IOException e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getCon(){
try {
return cpds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
Connection con = getCon();
System.out.println("con : "+con);
}
}