【问题标题】:manual set the properties of connection manager by c3p0通过 c3p0 手动设置连接管理器的属性
【发布时间】:2015-06-23 04:47:18
【问题描述】:

我从 c3p0 池获得连接以进行批量插入,我设置 autoCommit=false,使用后,我将其放回投票。如果 autoCommit=false 对这个连接仍然有效?

【问题讨论】:

    标签: c3p0


    【解决方案1】:

    没有。根据 JDBC 规范,新的连接是 autocommit=true,并且 c3p0 实现了透明的连接池,这意味着在 c3p0 应用程序中正常运行的应用程序也应该使用未池化的连接源正常运行。

    如果您愿意,您可以通过定义 ConnectionCustomizer 来覆盖此行为。比如……

    package mypkg;
    
    import com.mchange.v2.c3p0.AbstractConnectionCustomizer;
    import java.sql.Connection;
    
    public class AutocommitConnectionCustomizer extends AbstractConnectionCustomizer {
        @Override
        public void onCheckOut(Connection c, String parentDataSourceIdentityToken) throws Exception {
            c.setAutoCommit( false );
        }
    }
    

    然后,在您的配置中...

    c3p0.connectionCustomizerClassName=mypkg.AutocommitConnectionCustomizer
    

    我希望这会有所帮助!

    【讨论】:

    • 首先,非常感谢。正如您所说,c3p0 会覆盖 Connection 的 close 方法,在该方法中,它将属性重置为默认值,同时重置 autoCommit=true。我要做的就是确保在执行批量插入后自动提交为真。以防影响mybatis的其他行为!非常感谢!
    • 一旦您将autoCommit 设置为false,无论您执行任何数据库操作,它都将保持为假,直到您将close() Connection 或明确地将autoCommit 重置为true .
    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多