Java项目中数据库的连接池选用了C3P0,个人感觉还是挺好用的,目前没有发现什么问题,主要是配置上的结合,今天总结一下如何使用及通用配置解析。
1.第三方jar 我使用的是 c3p0-0.9.2-pre4.jar
2. 刚开始使用这个的时候,由于项目比较紧张,我采用的是set方式来进行配置,其实后来一了解,繁琐了很多,当初的方式如下:
- //数据库连接池 使用C3P0数据库连接池
- private static ComboPooledDataSource _ds = new ComboPooledDataSource();
-
- /**
- * 数据库连接池初始化
- */
- static {
- try {
- DbEntity db = ConfigCenter.GetDbEntity(); //DbEntity存储数据库连接中的各种信息
- _ds.setJdbcUrl(db.get_url());
- _ds.setUser(db.get_username());
- _ds.setPassword(db.get_password());
- _ds.setMaxStatements(0);
- //TODO 连接池各种优化配置 按需添加
- _ds.setDriverClass(db.get_driver());
- } catch (PropertyVetoException e) {
- ...
- }
- }
-
- /**
- * 获取数据库连接
- * @return
- */
- private static Connection getConnection() {
- Connection conn = null;
- try {
- conn = _ds.getConnection();
- } catch (Exception e) {
- ...
- }
- return conn;
- }
3. 上面这种配置连接池的方法是最繁琐的,之后我使用了配置文件配置,将配置文件c3p0-config.xml放在类加载路径下或自己定义的目录下,我个人喜欢将配置文件放入我指定的目录下,故我使用此种方式进行指定:
- //加载c3p0连接池配置
- System.setProperty("com.mchange.v2.c3p0.cfg.xml","configs/c3p0-config.xml");
4. 我之所以没有采用property文件,是因为我要用到多个数据库源,我的配置如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <c3p0-config>
- <named-config name="data1">
- <property name="user">root</property>
- <property name="password">root</property>
- <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
- <property name="jdbcUrl">jdbc:oracle:oci8:@dataname</property>
- <!-- 连接池初始化时建立的连接数 默认值是3 -->
- <property name="initialPoolSize">3</property>
- <!-- 连接的最大空闲时间 单位秒 默认是0-代表永远不会断开连接 超过设定时间的空闲连接将会断开 -->
- <property name="maxIdleTime">30</property>
- <!-- 连接池中拥有的最大连接数 默认值为15个 -->
- <property name="maxPoolSize">20</property>
- <!-- 连接池中保持的最小连接数 默认值为3个-->
- <property name="minPoolSize">3</property>
- <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置 默认值为0代表不处理 单位秒 -->
- <property name="maxIdleTimeExcessConnections">15</property>
- </named-config>
- </c3p0-config>
XML配置文件可以为多个数据源服务,提供default-config和named-config两种配置方式,如果你只用一个数据源,大可使用default-config配置,与named-config的却别是初始化的时候无参 or有参,default-config配置如下
- <?xml version="1.0" encoding="UTF-8"?>
- <c3p0-config>
- <default-config>
- <property name="user">root</property>
- <property name="password">root</property>
- <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
- <property name="jdbcUrl">jdbc:oracle:oci8:@dataname</property>
- <!-- 连接池初始化时建立的连接数 默认值是3 -->
- <property name="initialPoolSize">3</property>
- <!-- 连接的最大空闲时间 单位秒 默认是0-代表永远不会断开连接 超过设定时间的空闲连接将会断开 -->
- <property name="maxIdleTime">30</property>
- <!-- 连接池中拥有的最大连接数 默认值为15个 -->
- <property name="maxPoolSize">20</property>
- <!-- 连接池中保持的最小连接数 默认值为3个-->
- <property name="minPoolSize">3</property>
- <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置 默认值为0代表不处理 单位秒 -->
- <property name="maxIdleTimeExcessConnections">15</property>
- </default-config>
- </c3p0-config>
5.前序工作都做完了,现在该看看我们如何初始化了
- //数据库连接池 使用C3P0数据库连接池 使用named-config模式 则通过有参构造函数初始化 带上name
- private static ComboPooledDataSource _ds = new ComboPooledDataSource("data1");
- //采用default-config模式 则使用无参构造函数即可
- //private static ComboPooledDataSource _ds = new ComboPooledDataSource();
-
- /**
- * 获取数据库连接
- * @return
- */
- private static Connection getConnection() {
- Connection conn = null;
- try {
- conn = _ds.getConnection();
- } catch (Exception e) {
- ...
- }
- return conn;
- }
通过简单的配置即可实现多数据源的数据库连接池,在一个C3P0-config.xml配置文件中可以既有default-config 又有named-config,只是初始化的时候指明即可(无参 or 有参)
突然想到,既然总结了oracle数据库连接池的初始化,下一次把对各种语句or存储过程or函数的执行调度也总结下吧,敬请期待...
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。