簡體   English   中英

Quartz 2.2.3 JobStore 屬性被默認設置覆蓋 - Spring Boot、Liquibase、Oracle

[英]Quartz 2.2.3 JobStore Property Being Overriden by Default Settings - Spring Boot, Liquibase, Oracle

我正在嘗試在我的 Spring Boot 應用程序中實現一個 Quartz 調度程序; 但是,我在啟動后繼續收到以下錯誤:

Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "SCHED_NAME": invalid identifier.

在錯誤之前的啟動日志中,我看到:

liquibase                                : Successfully acquired change log lock
liquibase                                : Reading from PARTSVOICE_APP.DATABASECHANGELOG
liquibase                                : Successfully released change log lock
o.q.i.StdSchedulerFactory                : Using default implementation for ThreadExecutor
o.q.c.SchedulerSignalerImpl              : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
o.q.c.QuartzScheduler                    : Quartz Scheduler v.2.2.3 created.
o.s.s.q.LocalDataSourceJobStore          : Using db table-based data access locking (synchronization).
o.s.s.q.LocalDataSourceJobStore          : JobStoreCMT initialized.
o.q.c.QuartzScheduler                    : Scheduler meta-data: Quartz Scheduler (v2.2.3) 'scheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 25 threads.
  Using job-store 'org.springframework.scheduling.quartz.LocalDataSourceJobStore' - which supports persistence. and is not clustered.

此消息令人擔憂,因為在我的 application.yml 中,我的設置如下:

org:
  quartz:
    scheduler:
      instanceName: cdp-scheduler
      instanceId: AUTO
    threadPool:
      threadCount: 25
      class: org.quartz.simpl.SimpleThreadPool
    jobStore:
      class: org.quartz.impl.jdbcjobstore.JobStoreTX
      tablePrefix: c_

我閱讀了這些屬性並將它們放在 SchedulerFactoryBean 中:

 @Bean
public SchedulerFactoryBean scheduler(DataSource ds, SpringLiquibase dependent) throws SchedulerException, ConnectionException {
    SchedulerFactoryBean factory = new SchedulerFactoryBean();
    Properties quartzProps = new Properties();
    quartzProps.setProperty("org.quartz.scheduler.instanceId", quartzConfig.getInstanceId());
    quartzProps.setProperty("org.quartz.scheduler.instanceName", quartzConfig.getInstanceName());
    quartzProps.setProperty("org.quartz.threadPool.threadCount", quartzConfig.getThreadCount());
    quartzProps.setProperty("org.quartz.jobStore.class", quartzConfig.getJobStoreClass());
    quartzProps.setProperty("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.oracle.OracleDelegate");
    quartzProps.setProperty("org.quartz.threadPool.class", quartzConfig.getThreadPoolClass());
    factory.setOverwriteExistingJobs(true);
    factory.setAutoStartup(false);
    factory.setDataSource(ds);
    factory.setQuartzProperties(quartzProps);
    factory.setExposeSchedulerInRepository(true);
    factory.setAutoStartup(true);

    AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
    jobFactory.setApplicationContext(applicationContext);
    factory.setJobFactory(jobFactory);

    return factory;
}

我正在嘗試使用 org.quartz.impl.jdbcjobstore.JobStoreTX 類,以便我可以將 Quartz 信息存儲在我們的數據庫中。 但是,我相信從上面的日志消息中可以看到的內容已被覆蓋。 一個快速的谷歌搜索告訴我,如果你提供一個數據源,那么 JobStoreCMT 類會自動實現,但這對我來說沒有意義。

我還使用 Liquibase 來執行創建石英表的 SQL 腳本,該腳本執行得很好,它刪除並創建了我需要的表。 我也嘗試過使用 Flybase 但我得到了同樣的錯誤,所以它肯定與我的石英設置有關。

有沒有人有過類似的經歷? 有什么建議? 如果您認為我應該提供更多信息,請告訴我。 謝謝。

對於錯誤,我可以推斷表未正確創建(根本沒有或使用錯誤的腳本)。 對於Quartz ,您需要使用數據庫類型的 db 腳本創建表,您可以在quartz 下載中找到。

這是一個類似的案例: https : //groups.google.com/forum/#!topic/axonframework/IlWZ0UHK2hk

如果您認為腳本沒問題,請嘗試直接在您的數據庫中創建表。

如果它仍然不起作用,您可以轉到下一步並檢查配置。 也許您使用的tablePrefix沒有得到很好的解釋。 嘗試使用默認的QRTZ_

這是一個使用較低版本Quartz的設置示例。

http://www.opencodez.com/java/quartz-scheduler-with-spring-boot.htm

讓我知道它是否有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM