c3p0 使用及配置说明

来源:互联网 发布:淘宝复核阿里钱盾 编辑:程序博客网 时间:2024/06/05 01:12


public class DBPool {      private static DBPool dbPool;      private ComboPooledDataSource dataSource;        static {          dbPool = new DBPool();      }        public DBPool() {          try {              dataSource = new ComboPooledDataSource();              dataSource.setUser("root");              dataSource.setPassword("123456");              dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/game?user=root&password=123456&useUnicode=true");              dataSource.setDriverClass("com.mysql.jdbc.Driver");              // 设置初始连接池的大小!              dataSource.setInitialPoolSize(2);              // 设置连接池的最小值!               dataSource.setMinPoolSize(1);              // 设置连接池的最大值!               dataSource.setMaxPoolSize(10);              // 设置连接池中的最大Statements数量!              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();              ResultSet rs = con.createStatement().executeQuery("SELECT * FROM LESOGO_USER");              while (rs.next()) {                  System.out.println(rs.getObject(1));                  System.out.println(rs.getObject(2));                  System.out.println(rs.getObject(3));              }          } catch (Exception e) {          } finally {              if (con != null)                  con.close();          }      }  }  


配置说明:

1.  acquireIncrement #当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3

2.  acquireRetryAttempts #定义在从数据库获取新连接失败后重复尝试的次数。Default: 30

3.  acquireRetryDelay #两次连接中间隔时间,单位毫秒。Default: 1000

4.  autoCommitOnClose #连接关闭时默认将所有未提交的操作回滚。Default: false

5.  automaticTestTable #c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试 使用。Default: null

6.  breakAfterAcquireFailure #获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。Default: false

7.  checkoutTimeout #当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。Default: 0

8.  connectionTesterClassName #通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径。 Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester

9.  factoryClassLocation #指定c3p0 libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可 Default: null

10. forceIgnoreUnresolvedTransactions#Strongly disrecommended. Setting this to true may lead to subtle and bizarrebugs. (文档原文)作者强烈建议不使用的一个属性

11. idleConnectionTestPeriod#每60秒检查所有连接池中的空闲连接。Default: 0

12. initialPoolSize#初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3

13. maxIdleTime#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0

14. maxPoolSize#连接池中保留的

15. maxStatements#JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个 connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与 maxStatementsPerConnection均为0,则缓存被关闭。Default: 0

16. maxStatementsPerConnection#maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0

17. numHelperThreads#c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能通过多线程实现多个操作同时被执行。Default: 3

18. overrideDefaultUser#当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0的数据源时。Default: null

19. overrideDefaultPassword#与overrideDefaultUser参数对应使用的一个参数。Default: null

20. password#密码。Default: null

21. preferredTestQuery#定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:测试的表必须在初始数据源的时候就存在。Default: null

22. propertyCycle#用户修改系统配置参数执行前最多等待300秒。Default: 300

23. testConnectionOnCheckout#因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable 等方法来提升连接测试的性能。Default: false

24. testConnectionOnCheckin#如果设为true那么在取得连接的同时将校验连接的有效性。Default: false

25. user #用户名。Default: null

26. usesTraditionalReflectiveProxies#早期的c3p0版本对JDBC接口采用动态反射代理。在早期版本用途广泛的情况下这个参数允许用户恢复到动态反射代理以解决不稳定的故障。最新的非反射代理更快并且已经开始广泛的被使用,所以这个参数未必有用。现在原先的动态反射与新的非反射代理同时受到支持,但今后可能的版本可能不支持动态反射代理。Default: false


0 0
原创粉丝点击