Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调度时JDBC JobStoreCMT锁定_Java_Spring_Jdbc_Quartz Scheduler_Weblogic12c - Fatal编程技术网

Java 调度时JDBC JobStoreCMT锁定

Java 调度时JDBC JobStoreCMT锁定,java,spring,jdbc,quartz-scheduler,weblogic12c,Java,Spring,Jdbc,Quartz Scheduler,Weblogic12c,我使用的是Weblogic+Spring+quartz Quartz配置为使用JobStoreCMT 我注意到JobStoreCMT在调度作业时在quartz表上获得了一个DB锁 下面是JobStoreCMT代码段 protected Object executeInLock( String lockName, TransactionCallback txCallback) throws JobPersistenceException { boolean

我使用的是Weblogic+Spring+quartz

Quartz配置为使用JobStoreCMT

我注意到JobStoreCMT在调度作业时在quartz表上获得了一个DB锁

下面是JobStoreCMT代码段

protected Object executeInLock(
        String lockName, 
        TransactionCallback txCallback) throws JobPersistenceException {
    boolean transOwner = false;
    Connection conn = null;
    try {
        if (lockName != null) {
            // If we aren't using db locks, then delay getting DB connection 
            // until after aquiring the lock since it isn't needed.
            if (getLockHandler().requiresConnection()) {
                conn = getConnection();
            }

            transOwner = getLockHandler().obtainLock(conn, lockName);
        }

        if (conn == null) {
            conn = getConnection();
        }

        return txCallback.execute(conn);
    } finally {
        try {
            releaseLock(conn, LOCK_TRIGGER_ACCESS, transOwner);
        } finally {
            cleanupConnection(conn);
        }
    }
}
在这个方法之后,我在数据库的quartz表中看到了我计划的触发器和作业

我的问题是为什么石英在这个阶段需要锁定DB级

当作业开始执行、完成等时,我会看到需要锁


谢谢

我找到了一些解决问题的方法:

setLockOnInsert为false,因为默认情况下为true

public void setLockOnInsert(布尔型lockOnInsert)

插入新作业/触发器时是否获取锁。默认值为true,这是最安全的-一些数据库(如MS SQLServer)似乎需要这样做以避免在高负载下出现死锁,而其他数据库似乎不需要这样做就可以了。 将此属性设置为false将在添加新作业和触发器期间显著提高性能


+org.quartz.jobStore.acquireTriggersWithinLock我将其设置为false(默认设置),而不是我最初配置的true。

同时我发现:setLockOnInsert public void setLockOnInsert(布尔lockOnInsert)在插入新作业/触发器时是否获取锁。默认值为true,这是最安全的-一些数据库(如MS SQLServer)似乎需要这样做以避免在高负载下出现死锁,而其他数据库似乎不需要这样做就可以了。将此属性设置为false将在添加新作业和触发器期间显著提高性能。参数:lockOnInsert-