java - Grails Quartz 插件在启用持久性的情况下在启动时删除触发器

标签 java oracle grails quartz-scheduler

我遇到了以下问题:我有一个带有quartz 插件的grails 应用程序和一个持久存储(Oracle)。我的作业类有一个空的触发器 block ,如下所示:

class VodServerJob {
    static triggers = {}
    def volatility = false;
    def durability = true;
    def concurrency = false;
    def group = "MyGroup"
    def execute(context) { }
}

...但我在进行过程中以编程方式添加触发器(让用户安排作业的启动时间)。当我关闭应用程序时,触发器仍在数据库中。但在启动时,触发器被删除,从而破坏了持久存储的意义。

我的配置如下:

quartz {
    autoStartup = true
    jdbcStore = true
    waitForJobsToCompleteOnShutdown = true
}

environments {
    test { quartz { autoStartup = false } }
}

我的属性如下:

#============================================================================
# Configure ThreadPool  
#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 25
org.quartz.threadPool.threadPriority = 5

#============================================================================
# Configure JobStore  
#============================================================================

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_

#============================================================================
# Configure Datasources  
#============================================================================

org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@172.27.5.18:1521:dcrm
org.quartz.dataSource.myDS.user = <hidden, but valid>
org.quartz.dataSource.myDS.password = <hidden, but valid>
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery=select 0 from dual

根据我所看到的一切,这应该允许数据库持久性,但是,它在启动时被删除。有人知道为什么吗?

最佳答案

找到了这个问题的答案。默认情况下,触发器设置为 volatile ,这意味着它们在启动时被删除。只需按如下方式将触发器的 volatility 设置为 false 即可无限期地保留触发器。

trigger.setVolatility(false);

否则,它们会被删除。

关于java - Grails Quartz 插件在启用持久性的情况下在启动时删除触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059473/

相关文章:

oracle - 将常规 CURSOR 传递给需要 SYS_REFCURSOR 的 PL/SQL 过程

java - 如何捕获 "Invalid hex digit"?

oracle - 优化 Oracle 的 dup 删除语句

grails - 使用grail quartz 插件的多个调度程序

grails - 访问服务中的标签库

java - Spring MVC : Login and logout functions?

java - 负载均衡器通过 TCP 并使用 TLS 协议(protocol)传递消息

hibernate - GORM查询过滤器不是类的直接属性

java - Spring Rest Controller 字符串响应

java - 如何从地点选择器 Activity 中检索 map 快照?