C3P0由三部分内容组成。实例化对象,各配置项的含义,以及加载配置项的方式。

实例化对象的方式有三种,第一种方式直接new ComboPooledDataSource,第二种方式使用工厂类DataSources.poolDataSource方法。第三种不常见。第一种方式是最方便的方式。

C3P0的配置项主要有:

  1. 连接数据库的必要属性:例如jdbcUrl,user,password等。
  2. 连接池的大小配置。例如initialPoolSize
  3. 连接对象的生命周期。例如maxConnectionAge。
  4. 测试连接的配置,例如preferredTestQuery指定测试SQL语句。
  5. 重连策略的配置,例如acquireRetryAttempts指定重连次数。
  6. statement对象的配置,例如maxStatements指定最大Statement的总数。
  7. 线程配置,例如numHelperThread指定连接池拥有的线程数量。
  8. 事务配置,例如autoCommitOnClose指定是否在回收连接对象时自动提交事务。
  9. 调试模式,例如debugUnreturnedConnectionStackTraces为true时,会打印所有从连接池获取连接对象的记录。
  10. 监听类的设置,例如connectionCustomizerClassName指定监听类的名称,该类可以实现onAcquire,onDestory等方法。
  11. 日志的设置,例如com.mchange.v2.log.MLog指定日志的实现方式。常见的有log4J,commonLogging等。

配置项常见的加载方式有三种:

  1. 代码方式:通过实例对象调用setXX方法。
  2. properties文件:这种方式需要properties文件的名称必须为c3p0.properties,而且该文件必须在类加载路径下。
  3. xml文件:这种方式需要文件名称为c3p0-config.xml,路径由com.mchange.v2.c3p0.cfg.xml指定。

实例化                                                                  

实例化ComboPooledDataSource

 1 // 创建实例,dataSourceName指定数据源的名称
 2 ComboPooledDataSource dataSource = new ComboPooledDataSource(dataSourceName);
 3 // 设置数据库url
 4 dataSource.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:masteroracle");
 5 // 设置数据库驱动类
 6 dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver");
 7 // 设置用户名
 8 dataSource.setUser("system");
 9 // 设置密码
10 dataSource.setPassword("password");
11 Connection conn = dataSource.getConnection();
12 runSQLTest(conn);

工厂DataSources方式

 1 // 创建unpooled的数据源
 2 DataSource ds_unpooled = DataSources.unpooledDataSource(jdbcUrl, user, password);
 3 // pooled数据源的参数
 4 Map<String,String> paramMap = new HashMap<>();
 5 DataSource pooled = DataSources.pooledDataSource(ds_unpooled,paramMap);
 6 Connection conn = pooled.getConnection();
 7 runSQLTest(conn);
 8 conn.close();
 9 DataSources.destroy(pooled);
10 return pooled;

配置项的含义                                                     

      C3P0各配置项的前缀为c3p0。如果指定dataSourceName,前缀为c3p0.named-configs.dataSourceName。如果存在多个用户,用户可以覆盖默认的配置项,前缀为c3p0.user-overrides.user。

Java代码方式

 1     /** -----------------------配置数据源----------------------------- **/
 2     /**
 3      * 配置数据源
 4      * 
 5      * @param dataSource
 6      * @return
 7      * @throws PropertyVetoException
 8      */
 9     public static ComboPooledDataSource configDataSource(ComboPooledDataSource dataSource)
10             throws PropertyVetoException {
11         // 连接数据库的必要属性
12         connDatabaseConfig(dataSource,"masterOracle");
13         // 连接池的相关配置
14         connPoolConfig(dataSource);
15         // 连接对象的生命周期配置
16         connAgeConfig(dataSource);
17         // 测试连接的配置
18         connTestConfig(dataSource);
19         // statement对象的配置
20         statementConfig(dataSource);
21         // 重连配置
22         reconnConfig(dataSource);
23         // 连接的监听类配置
24         connListenerConfig(dataSource);
25         // 事务的配置
26         tranConfig(dataSource);
27         // 调试模式
28         debugMode(dataSource);
29         // 线程配置
30         threadConfig(dataSource);
31         return dataSource;
32

连接必要属性

  1. driverClassName:驱动类的名称,包名+类名
  2. jdbcUrl:数据库实例的url地址,格式为jdbc:subprotocol:subname。其中subprotocol表示连接方式。
  3. user:用户名
  4. password:密码。

C3P0.properties的方式

##-------------------------------数据库连接属性-----------------------------------##
# 驱动类名称
c3p0.driverClass=oracle.jdbc.driver.OracleDriver
# 数据库实例url地址
c3p0.jdbcUrl=jdbc:oracle:thin:@localhost:1521:masteroracle
# 用户名
c3p0.user=system
# 密码
c3p0.password=password

代码方式

 1         // 设置数据库url
 2         dataSource.setJdbcUrl(jdbcUrl);
 3         // 设置数据库驱动类
 4         dataSource.setDriverClass(driverClassName);
 5         // 设置用户名
 6         dataSource.setUser(user);
 7         // 设置密码
 8         dataSource.setPassword(password);
 9         // 输出dataSourceName,在初始化ComboPooledDataSource时,字符串参数作为数据源名称,
10         dataSource.getDataSourceName();
View Code

相关文章: