c3p0笔记

C3P0学习集


使用

关于C3P0名字由来据说是星球大战中的C3P0号机器人

从用户的角度来看,c3p0只提供标准的jdbc数据源对象。在创建这些数据源时,用户可以控制池相关、命名相关和其他属性。一旦创建了数据源,所有池对用户都是完全透明的。

获取c3p0池支持数据源有三种方法:1)直接实例化并配置 ComboPooledDataSource;2)使用DataSources工厂类;3)通过直接实例化PoolBackedDataSource并设置其ConectionPoolDataSource来“构建自己的”池支持数据源。大多数用户可能会发现实例化combooleddatasource是最方便的方法。一旦实例化,c3p0数据源就可以绑定到几乎任何符合JNDI的名称服务。
不管您如何创建数据源,c3p0将对您未以编程方式指定的任何配置参数使用默认值。c3p0具有内置的硬编码默认值,但是您可以用配置文件覆盖这些默认值,这些文件作为顶级资源放在加载c3p0的jar文件的同一个类路径(或类加载器)中。
c3p0数据源可以通过简单的java.util.Properties属性名为c3p0.properties的文件,通过更高级的HOCON配置文件(例如。应用程序.conf, 应用程序.json),或XML格式的c3p0-配置.xml. 请参阅下面的配置。

实例化和配置ComboPooledDatasource转到顶部
也许创建c3p0池数据源的最直接的方法是实例化com.mchange.v2.c3p0.ComboPooledDataSource。这是一个JavaBean样式的类,具有公共的、无参数的构造函数,但是在使用数据源之前,必须确保至少设置jdbcUrl属性。您可能还需要设置用户和密码,并且,如果您使用的是一个不会在外部预加载的旧式JDBC驱动程序,则应该设置driverClass。

public static void main(String[] args) {
    ComboPooledDataSource cpds = new ComboPooledDataSource();
     cpds.setJdbcUrl( "jdbc:postgresql://localhost/testdb" );
     cpds.setUser("swaldman");
     cpds.setPassword("test-password"); // the settings below are optional -- c3p0 can work with defaults
     cpds.setMinPoolSize(5);
     cpds.setAcquireIncrement(5);
     cpds.setMaxPoolSize(20);  // The DataSource cpds is now a fully configured and usable pooled DataSource
}

任何c3p0数据源属性的默认值都由您提供的配置决定,否则将恢复为硬编码的默认值[请参阅配置属性]。c3p0支持命名配置,因此您可以配置多个数据源。如果希望使用命名配置,请构造com.mchange.v2.c3p0.ComboPooledDataSource,配置名称为构造函数:

ComboPooledDataSource cpds = new ComboPooledDataSource("intergalactoApp");

当然,您仍然可以通过编程方式重写上述任何属性。

使用DataSources工厂类

或者,您可以使用静态工厂类 [com.mchange.v2.c3p0.DataSources]从传统的JDBC驱动程序构建非池化的DataSource,并从非池化的DataSource来构建池化的DataSource:

DataSource ds_unpooled = DataSources.unpooledDataSource("jdbc:postgresql://localhost/testdb",
        "swaldman",
        "test-password");
DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled );

如果使用DataSources工厂类,并且希望以编程方式重写默认配置参数,则可以提供重写属性的映射,在创造出pooleddatasource()时

查询池数据源的当前状态转到顶部
c3p0由池支持的数据源,其中包括combooleddatasource的实现和DataSources.pooledDataSource( … ),都实现了接口com.mchange.v2.c3p0.PooledDataSource,它提供了许多查询数据源连接池状态的方法。

清理c3p0池数据源后

在c3p0创建数据源之后,清理数据源的简单方法是使用类数据源定义的static destroy。只有池数据源需要清理,但是DataSources.destory( … ) 如果在非池化或非c3p0数据源上调用它,则不会造成任何损害。

另外,c3p0的PooledDataSource 接口包含一个close()方法,当您知道使用完DataSource 后就可以调用该方法。因此,您可以将c3p0派生的数据源强制转换为PooledDataSource并关闭它:

ComboPooledDataSource是PooledDataSource的一个实例,可以通过它的close()方法直接关闭。PooledDataSource实现java.lang.AutoCloseable(自动关闭),因此它们可以由java7+try with resources块来管理。

在其未被引用的客户端的垃圾收集()实例关闭之前,将其自身关闭。一如往常,定案应被视为一种后盾,而不是一种迅速或可靠的资源清理方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值