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

Java Grails Quartz插件在启用持久性的情况下在启动时删除触发器,java,oracle,grails,quartz-scheduler,Java,Oracle,Grails,Quartz Scheduler,我遇到了以下问题:我有一个grails应用程序,带有quartz插件和一个持久存储Oracle。我的作业类有一个空触发器块,如下所示: class VodServerJob { static triggers = {} def volatility = false; def durability = true; def concurrency = false; def group = "MyGroup" def execute(context) {

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

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
我的财产如下:

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

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

找到了这个问题的答案。默认情况下,触发器设置为volatile,这意味着它们在启动时被删除。只需将触发器的波动性设置为false,如下所示,您的触发器就可以无限期地持久化

trigger.setvolatityfalse

否则,他们会被抹掉