美文网首页
C3P0数据库连接池和TransactionManager

C3P0数据库连接池和TransactionManager

作者: 亲爱的翔子 | 来源:发表于2016-12-23 19:18 被阅读0次

C3PO数据库连接池

优点:性能比较dbcp好,稳定性也比dbcp强

参数介绍

Ø BasicDataSource 相关的参数说明

dataSource: 要连接的 datasource (通常我们不会定义在 server.xml)

defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true

defaultReadOnly: 对于数据库是否只能读取, 默认值为 false

driverClassName:连接数据库所用的 JDBC Driver Class,

maxActive: 可以从对象池中取出的对象最大个数,为0则表示没有限制,默认为8

maxIdle: 最大等待连接中的数量,设 0 为没有限制 (对象池中对象最大个数)

minIdle:对象池中对象最小个数

maxWait: 最大等待秒数, 单位为 ms, 超过时间会丢出错误信息

password: 登陆数据库所用的密码

url: 连接数据库的 URL

username: 登陆数据库所用的帐号

validationQuery: 验证连接是否成功, SQL SELECT 指令至少要返回一行

removeAbandoned: 是否自我中断, 默认是 false

removeAbandonedTimeout: 几秒后会自我中断, removeAbandoned 必须为 true

logAbandoned: 是否记录中断事件, 默认为 false

minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证;默认30分钟

timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程,默认-1

testOnBorrow:取得对象时是否进行验证,检查对象是否有效,默认为false

testOnReturn:返回对象时是否进行验证,检查对象是否有效,默认为false

testWhileIdle:空闲时是否进行验证,检查对象是否有效,默认为false

Ø 在使用DBCP的时候,如果使用默认值,则数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际上就会是无效的数据库连接。因此为了防止获得的数据库连接失效,在使用的时候最好保证:

username: 登陆数据库所用的帐号

validationQuery:SELECT COUNT(*) FROM DUAL

testOnBorrow、testOnReturn、testWhileIdle:最好都设为true

minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证

timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程

Ø PS:在构造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也会使用GenericObjectPool] 时,会生成一个内嵌类Evictor,实现自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每过 timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查对象的闲置时间是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分 钟),是则销毁此对象,否则就激活并校验对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。在调用 returnObject方法把对象放回对象池,首先检查该对象是否有效,然后调用PoolableObjectFactory 的passivateObject方法使对象处于非活动状态。再检查对象池中对象个数是否小于maxIdle,是则可以把此对象放回对象池,否则销毁此对 象

TransactionManager

事务

一个使用 MyBatis-spring的主要原因是它允许 MyBatis 参与到 Spring 的事务管理中。而 不是给 MyBatis 创建一个新的特定的事务管理器,MyBatis-Spring 利用了存在于 Spring 中的 DataSourceTransactionManager。

一旦 Spring 的 PlatformTransactionManager 配置好了,你可以在 Spring 中以你通常的做 法来配置事务。@Transactional 注解和 AOP(Aspect-Oriented Program,面向切面编程,译 者注)样式的配置都是支持的。在事务处理期间,一个单独的 SqlSession 对象将会被创建 和使用。当事务完成时,这个 session 会以合适的方式提交或回滚。

一旦事务创建之后,MyBatis-Spring 将会透明的管理事务。在你的 DAO 类中就不需要额 外的代码了。

标准配置

要 开 启 Spring 的 事 务 处 理 , 在 Spring 的 XML 配 置 文 件 中 简 单 创 建 一 个 DataSourceTransactionManager 对象:

指定的 DataSource 一般可以是你使用 Spring 的任意 JDBC DataSource。这包含了连接 池和通过 JNDI 查找获得的 DataSource。

要注意, 为事务管理器指定的 DataSource 必须和用来创建 SqlSessionFactoryBean 的 是同一个数据源,否则事务管理器就无法工作了。

容器管理事务

如果你正使用一个 JEE 容器而且想让 Spring 参与到容器管理事务(Containermanaged transactions,CMT,译者注)中,那么 Spring 应该使用 JtaTransactionManager 或它的容 器指定的子类来配置。做这件事情的最方便的方式是用 Spring 的事务命名空间:

在这种配置中,MyBatis 将会和其它由 CMT 配置的 Spring 事务资源一样。Spring 会自动 使用任意存在的容器事务,在上面附加一个 SqlSession。如果没有开始事务,或者需要基 于事务配置,Spring 会开启一个新的容器管理事务。

注 意 , 如 果 你 想 使 用 CMT , 而 不 想 使 用 Spring 的 事 务 管 理 , 你 就 必 须 配 置 SqlSessionFactoryBean 来使用基本的 MyBatis 的 ManagedTransactionFactory 而不是其 它任意的 Spring 事务管理器:

编程式事务管理

MyBatis 的 SqlSession 提供指定的方法来处理编程式的事务。 但是当使用 MyBatis-Spring 时, bean 将会使用 Spring 管理的 SqlSession 或映射器来注入。 那就是说 Spring 通常是处理 事务的。

你 不 能 在 Spring 管 理 的 SqlSession 上 调 用 SqlSession.commit() , SqlSession.rollback() 或 SqlSession.close() 方 法 。 如 果 这 样 做 了 , 就 会 抛 出 UnsupportedOperationException 异常。注意在使用注入的映射器时不能访问那些方法。

无论 JDBC 连接是否设置为自动提交, SqlSession 数据方法的执行或在 Spring 事务之外 任意调用映射器方法都将会自动被提交。

相关文章

  • JDBC常见开源的连接池

    c3p0数据库连接池 1.添加依赖jar包(连接池jar + mysql驱动包)c3p0数据库连接池jar包链接:...

  • 阿里数据库连接池druid整理

    常见的数据库连接池 DBCP(Database Connection pool) C3P0 druid数据库连接池...

  • JDBC C3P0数据库连接池

    配置数据库连接池C3P0两种方式 1.手动配置 2.通过XML文件配置 使用C3P0数据库连接池技术

  • C3P0数据库连接池和TransactionManager

    C3PO数据库连接池 优点:性能比较dbcp好,稳定性也比dbcp强 参数介绍 Ø BasicDataSource...

  • 数据库连接池

    数据库连接池 C3P0:数据库连接技术 Druid:数据库连接池实现技术,由阿里巴巴技术团队提供 Spring JDBC

  • JDBC进阶学习笔记

    JDBC进阶 JDBC连接池 1. 常见的JDBC连接池 c3p0 开源连接池 druid 阿里的开源数据库连接池...

  • 数据库连接池之C3P0

    数据库连接池之C3P0 前言 在上一小节中,我们接触了数据库连接池的,了解了数据库连接池的作用,并且通过小案例使用...

  • JDBC 进阶——连接池

    本文包括传统JDBC的缺点连接池原理自定义连接池开源数据库连接池DBCP连接池C3P0连接池Tomcat内置连接池...

  • JavaMysql数据库连接池

    C3P0 导入类库数据库连接池C3P0 链接: https://pan.baidu.com/s/1coYMVc 密...

  • 数据库连接池DBCP的使用

    我们常用的数据库连接池 除了C3P0还有DBCP 今天我们就来了解一下 DBCP数据库连接池 DBCP(DataB...

网友评论

      本文标题:C3P0数据库连接池和TransactionManager

      本文链接:https://www.haomeiwen.com/subject/kwtzmttx.html