`
mzy0316
  • 浏览: 2257 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

jdbc+proxool+oracle,当连接池强行关闭链接时,之前的sql操作都被强制提交了

阅读更多
工作中遇到的问题,记录一下

项目中用的连接池版本是proxool-0.9.1
用jdbc来批量操作数据.
连接池的配置maximumActiveTime配的是180000,即(3min)
今天由于网络原因,插入操作11w条数据用了3min多还没好,结果被连接池强行关掉了.
抛出异常,理论上,应该回滚掉所有操作的.可是查看插入记录,入库了10w多条,还有1w多条没进去.
抛出的异常信息
rollback error !
java.sql.SQLException: Couldn't perform the operation rollback: You can't perform any operations on this connection. It has been automatically closed by Proxool for some reason (see logs)

jdbc获取链接代码
try{
conn = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
conn.setAutoCommit(false);
//批量操作
conn.commit();
}catch(Exception e){
try {
conn.rollback();
    } catch (SQLException e1) {
logger.error("rollback error !", e1);
    }
}
spring的事务已关,此方法上加了这个@Transactional(propagation=Propagation.NEVER)

在proxool官网的bug反映里面关于这个问题有人这样写到
Some JDBC implementations - like Oracle - perform an implicit commit before closing a connection, therefore Proxool should always - or at least configurable -rollback the connection before closing it. Otherwise an inconsistent state might be written to the database if the Pool is shutdown via ShutdownHook.
于是我发现悲摧了.08年提交的问题,proxool一直没给予答复和解决办法...
看来这个问题,只能把maximumActiveTime这个参数时间设长,来尽量避免出现这种问题了.
我自己尝试了下在commit之前调用conn.close();数据却没有提交进数据库,估计这么调用的时候,oracle的jdbc有做rollback操作.
而连接池那边在直接杀掉进程之前没做rollback操作...

目前除了把这个参数maximumActiveTime调大之外没想到其他解决办法.
分享到:
评论

相关推荐

    hibernate+proxool+Oracle库文件

    标题中的“hibernate+proxool+Oracle库文件”揭示了这个压缩包包含的是一个集成Hibernate ORM框架、Proxool连接池以及Oracle数据库驱动的软件库。这些组件都是Java开发中用于高效、稳定地处理数据库操作的重要工具。...

    oracle proxool jar jdbc jar包 proxool源码包 Java实现 oracle proxool 实例

    在使用Proxool连接池时,需要将这个JDBC驱动添加到类路径中,以便Proxool能够正确地建立和管理与Oracle数据库的连接。 `proxool的源码包` 提供了Proxool的源代码,这对于开发者来说是极其宝贵的资源。通过阅读源...

    基于ssh的proxool连接池配置

    在这里,我们通过`dataSource`属性引用了上面配置的数据源,这样Hibernate就能使用Proxool连接池进行数据库操作。 5. 在`hibernateProperties`中,我们设置了`hibernate.dialect`为`MySQLDialect`,表示使用的是...

    在Hibernate中配置Proxool连接池

    在Java开发中,使用Hibernate作为持久层框架时,为了提高数据库操作的性能和资源利用率,通常会引入连接池技术。Proxool是Apache的一个开源项目,它提供了一个轻量级的数据库连接池实现。本篇将详细介绍如何在...

    配置Hibernate使用Proxool连接池

    在Java的Web开发中,数据库连接管理是一个至关重要的环节,特别是在处理高并发场景时,合理的数据库连接池配置能显著提高系统性能。本篇文章将详细讲解如何配置Hibernate框架以使用Proxool连接池。 首先,我们需要...

    proxool连接池.txt

    ### Proxool连接池知识点详解 #### 一、Proxool连接池简介 Proxool是Logical Cobwebs公司开发的一款轻量级的JDBC连接池组件。它通过提供高效的数据库连接管理和复用机制来提高应用程序的性能。Proxool不仅支持多种...

    proxool-0.9.1.rar和JDBC包

    标题中的“proxool-0.9.1.rar”和描述中的“JDBC包”提示了我们,这个压缩包包含的是一个名为Proxool的数据库连接池实现和Java Database Connectivity (JDBC) 相关的资源。Proxool是Apache软件基金会的一个开源项目...

    proxool相关jar包.rar

    - 动态扩展:当连接池达到预定上限时,Proxool可以动态地创建新的连接,以适应负载的变化。 - 支持多种数据库:Proxool支持多种主流的数据库,如Oracle、MySQL、SQL Server等。 在实际应用中,开发人员通常会将...

    proxool数据库总结

    **数据库连接池**:数据库连接池是应用程序中管理数据库连接的一种机制,它创建一组预设的数据库连接并保持这些连接处于空闲状态,当应用需要连接时,可以从池中获取,使用完毕后归还,而不是每次操作都创建和关闭新...

    Java各数据库连接池配置介绍

    Java数据库连接池是管理数据库连接的一种机制,它可以有效地复用数据库连接,避免每次数据库操作时创建和销毁连接的开销,从而提高了应用的性能。在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 *...

    proxool-0.9.1.jar,proxool-cglib.jar

    6. **兼容性**:Proxool支持多种主流的JDBC驱动,如Oracle、MySQL、SQL Server等,因此可以广泛应用于各种Java应用中。 至于压缩包内的"proxool"文件,可能是Proxool的配置文件或者其他的辅助资源。使用这些文件时...

    Hibernate 联接池 proxool例子和jar包

    当应用程序需要访问数据库时,它会从连接池中获取一个已建立的连接,用完后归还,而不是每次请求都新建连接。Proxool是Apache的一个项目,提供了一个轻量级、可配置的连接池实现。 接下来,我们详细讲解`Proxool`:...

    proxool 的使用 配置

    标题 "proxool 的使用配置" 暗示我们将探讨一个名为 Proxool 的数据库连接池的配置和使用方法。Proxool 是一个轻量级、高效的开源 Java 数据库连接池,它提供了一种灵活的方式来管理和控制数据库连接。在这个主题中...

    java 连接池

    连接池的主要目的是减少创建和销毁数据库连接的开销,因为建立和关闭数据库连接是相对耗时的操作。通过连接池,可以预先配置一定数量的数据库连接,并在需要时重复使用这些连接,从而提高系统的性能和响应速度。 在...

    Proxool.jar

    标题中的"Proxool.jar"指的是Proxool数据库连接池的Java库文件,它是Hibernate框架中常用的一个连接池实现。连接池在Java应用程序,特别是基于JDBC的Web应用中起着至关重要的作用,它能够有效地管理和复用数据库连接...

    Hibernate连接池的三种配置方式

    标题中的“Hibernate连接池的三种配置方式”指的是Hibernate框架中常用的三种数据库连接池实现,分别是:DBCP (BasicDataSource),C3P0,以及Proxool。这些连接池的目的是管理和优化数据库连接的创建、分配和回收,...

    proxool必备的3个jar包

    标题 "proxool必备的3个jar包" 指向的是在Java开发环境中使用Proxool连接池时所需的关键库文件。Proxool是一个开源的数据库连接池解决方案,它允许开发者管理和优化数据库连接,提高应用性能,降低资源消耗。在这个...

    java 链接池应用

    Java链接池是数据库连接管理的一种高效策略,它允许应用程序重复使用已经建立的数据库连接,而不是每次需要时都创建新的连接。这显著降低了数据库连接的创建和销毁带来的开销,提升了系统的性能和响应速度。在本示例...

Global site tag (gtag.js) - Google Analytics