首页 > 代码库 > c3p0的几种使用方式(原文地址: https://my.oschina.net/liangtee/blog/101047)
c3p0的几种使用方式(原文地址: https://my.oschina.net/liangtee/blog/101047)
package com.c3p0.test; import java.sql.Connection; import java.sql.SQLException; import java.beans.PropertyVetoException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DBPool { private static DBPool dbPool; private ComboPooledDataSource dataSource; static { dbPool = new DBPool(); } public DBPool() { try { dataSource = new ComboPooledDataSource(); dataSource.setUser("id"); dataSource.setPassword("pw"); dataSource.setJdbcUrl( "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=GB2312"); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setInitialPoolSize(2); dataSource.setMinPoolSize(1); dataSource.setMaxPoolSize(10); dataSource.setMaxStatements(50); dataSource.setMaxIdleTime(60); } catch (PropertyVetoException e) { throw new RuntimeException(e); } } public final static DBPool getInstance() { return dbPool; } public final Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException("无法从数据源获取连接", e); } } public static void main(String[] args) throws SQLException { Connection con = null; try { con = DBPool.getInstance().getConnection(); } catch (Exception e) { } finally { if (con != null) con.close(); } } }
以上是直接在combopooleddatasource里面直接设置属性值
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="user">test</property> <property name="password">test</property> <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property> <property name="driverClass">oracle.jdbc.OracleDriver</property> <property name="automaticTestTable">con_test</property> <property name="checkoutTimeout">30000</property> <property name="idleConnectionTestPeriod">30</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> <property name="maxStatements">200</property> <user-overrides user="test-user"> <property name="maxPoolSize">10</property> <property name="minPoolSize">1</property> <property name="maxStatements">0</property> </user-overrides> </default-config> <!-- This app is massive! --> <named-config name="intergalactoApp"> <property name="acquireIncrement">50</property> <property name="initialPoolSize">100</property> <property name="minPoolSize">50</property> <property name="maxPoolSize">1000</property> <!-- intergalactoApp adopts a different approach to configuring statement caching --> <property name="maxStatements">0</property> <property name="maxStatementsPerConnection">5</property> <!-- he‘s important, but there‘s only one of him --> <user-overrides user="master-of-the-universe"> <property name="acquireIncrement">1</property> <property name="initialPoolSize">1</property> <property name="minPoolSize">1</property> <property name="maxPoolSize">5</property> <property name="maxStatementsPerConnection">50</property> </user-overrides> </named-config> <named-config name="userApp"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property> <property name="user">root</property> <property name="password">123456</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">10</property> <property name="maxPoolSize">20</property> <property name="maxStatements">0</property> <property name="maxStatementsPerConnection">5</property> <!-- he‘s important, but there‘s only one of him --> <user-overrides user="master-of-the-universe"> <property name="acquireIncrement">1</property> <property name="initialPoolSize">1</property> <property name="minPoolSize">1</property> <property name="maxPoolSize">5</property> <property name="maxStatementsPerConnection">50</property> </user-overrides> </named-config> </c3p0-config>
package com.c3p0.test; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DbConnection { private static DataSource dataSource; static { dataSource = new ComboPooledDataSource("userApp"); } public static Connection getConnectioon() throws SQLException { return dataSource.getConnection(); } }
以上是使用配置文件的形式
package com.c3p0.test; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import com.mchange.v2.c3p0.ComboPooledDataSource; import com.mchange.v2.c3p0.DataSources; public final class ConnectionManager { private static ConnectionManager instance; public ComboPooledDataSource ds; private static String c3p0Properties = "c3p0.properties"; private ConnectionManager() throws Exception { Properties p = new Properties(); p.load(this.getClass().getResourceAsStream(c3p0Properties)); ds = new ComboPooledDataSource(); ds.setUser(p.getProperty("user")); ds.setPassword(p.getProperty("password")); ds.setJdbcUrl(p.getProperty("jdbcUrl")); ds.setDriverClass(p.getProperty("driverClass")); ds.setInitialPoolSize(Integer.parseInt(p.getProperty("initialPoolSize"))); ds.setMinPoolSize(Integer.parseInt(p.getProperty("minPoolSize"))); ds.setMaxPoolSize(Integer.parseInt(p.getProperty("maxPoolSize"))); ds.setMaxStatements(Integer.parseInt(p.getProperty("maxStatements"))); ds.setMaxIdleTime(Integer.parseInt(p.getProperty("maxIdleTime"))); } public static final ConnectionManager getInstance() { if (instance == null) { try { instance = new ConnectionManager(); } catch (Exception e) { e.printStackTrace(); } } return instance; } public synchronized final Connection getConnection() { try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } protected void finalize() throws Throwable { DataSources.destroy(ds); // 关闭datasource super.finalize(); } }
以上使用properties属性文件设置属性
c3p0的几种使用方式(原文地址: https://my.oschina.net/liangtee/blog/101047)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。