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 引导应用程序中实现 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 class 以便我可以将 Quartz 信息存储在我们的数据库中。但是,我相信从上面的日志消息中可以看到,这已被覆盖。快速 Google 搜索告诉我,如果您提供数据源,那么 JobStoreCMT class 会自动实现,但这对我来说没有意义。
我还使用 Liquibase 来执行创建石英表的 SQL 脚本,它执行得很好,它会删除并创建我需要的表。我也试过使用 Flybase 但我得到了同样的错误,所以它肯定与我的石英设置有关。
有没有人有过类似的经历?有什么建议么?如果您认为我应该提供更多信息,请告诉我。谢谢。
对于错误,我可以推断 table 没有正确创建(根本没有创建或使用了错误的脚本)。对于 Quartz
,您需要使用适合您的数据库类型的 db 脚本创建 tables,您可以在 quartz download.
中找到它
这是一个类似的案例:https://groups.google.com/forum/#!topic/axonframework/IlWZ0UHK2hk
如果您认为脚本没问题,请尝试直接在您的数据库中创建 table。
如果还是不行可以进入下一步检查配置。也许您使用的 tablePrefix
没有得到很好的解释。尝试使用默认的 QRTZ_
.
这里是低版本Quartz
的设置示例。
http://www.opencodez.com/java/quartz-scheduler-with-spring-boot.htm
如果有效请告诉我!
我正在尝试在我的 Spring 引导应用程序中实现 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 class 以便我可以将 Quartz 信息存储在我们的数据库中。但是,我相信从上面的日志消息中可以看到,这已被覆盖。快速 Google 搜索告诉我,如果您提供数据源,那么 JobStoreCMT class 会自动实现,但这对我来说没有意义。
我还使用 Liquibase 来执行创建石英表的 SQL 脚本,它执行得很好,它会删除并创建我需要的表。我也试过使用 Flybase 但我得到了同样的错误,所以它肯定与我的石英设置有关。
有没有人有过类似的经历?有什么建议么?如果您认为我应该提供更多信息,请告诉我。谢谢。
对于错误,我可以推断 table 没有正确创建(根本没有创建或使用了错误的脚本)。对于 Quartz
,您需要使用适合您的数据库类型的 db 脚本创建 tables,您可以在 quartz download.
这是一个类似的案例:https://groups.google.com/forum/#!topic/axonframework/IlWZ0UHK2hk
如果您认为脚本没问题,请尝试直接在您的数据库中创建 table。
如果还是不行可以进入下一步检查配置。也许您使用的 tablePrefix
没有得到很好的解释。尝试使用默认的 QRTZ_
.
这里是低版本Quartz
的设置示例。
http://www.opencodez.com/java/quartz-scheduler-with-spring-boot.htm
如果有效请告诉我!