jobJDBCStore 的 Quartz 初始化错误

问题描述 投票:0回答:3

我已经使用 jobRamStore 成功地将 Quartz 实现到我的项目中,现在正在尝试配置 Quartz 以使用 JobStoreTX 来持久保存作业。我唯一改变的是这里的属性文件:

org.quartz.scheduler.instanceName =                 QuartzJDBC
org.quartz.scheduler.rmi.export =                   false
org.quartz.scheduler.rmi.proxy =                    false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
org.quartz.threadPool.class =                       org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount =                 10
org.quartz.threadPool.threadPriority =              5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread= true

org.quartz.jobStore.misfireThreshold =              60000

org.quartz.jobStore.class =                         org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.class =                        org.quartz.simpl.RAMJobStore

#jobstoreTX configuration
#org.quartz.jobStore.nonManagedTXDataSource =       nonManaged
org.quartz.jobStore.driverDelegateClass =           org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.datasource =                    nonManaged

#non-managed datasource 
org.quartz.dataSource.nonManaged.driver =           org.postgresql.Driver
org.quartz.dataSource.nonManaged.URL =              some/correct/url
org.quartz.dataSource.nonManaged.user =             someName
org.quartz.dataSource.nonManaged.password =         somePassword
org.quartz.dataSource.nonManaged.maxConnections =   30

在项目初始化期间,我收到以下错误:

org.quartz.SchedulerException: 
JobStore class 'org.quartz.impl.jdbcjobstore.JobStoreTX' props could not be configured. 
[See nested exception: java.lang.NoSuchMethodException: No setter for property 'datasource']
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:882)
at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1517)
at org.quartz.ee.servlet.QuartzInitializerListener.contextInitialized(QuartzInitializerListener.java:171)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4812)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodException: No setter for property 'datasource'
at org.quartz.impl.StdSchedulerFactory.setBeanProps(StdSchedulerFactory.java:1405)
at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:880)

我遵循石英网站上的配置规范,但对我缺少的内容感到困惑。有趣的是,默认情况下仅使用 jobRamStore。如果你们能提供任何帮助,我们将不胜感激。谢谢

java properties scheduled-tasks quartz-scheduler
3个回答
3
投票

我写这个答案的原因是它可以帮助某人。 我花了大约 5 个小时来解决这个问题,因为没有合适的例子。

当我遇到问题时

No setter for property 'datasource'
是因为这个
spring.quartz.properties.org.quartz.jobStore.datasource

datasource
的情况下。它应该在
camelCase

spring.quartz.properties.org.quartz.jobStore.dataSource

解决此错误后,我收到了另一个与

相关的错误

'org.quartz.utils.C3p0PoolingConnectionProvider' could not be instantiated

为此我必须添加我的 gradle 导入

    compile group: 'com.mchange', name: 'c3p0', version: '0.9.5.5'

终于可以运行应用程序了 我的整个应用程序配置是

 spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/anonymization-job
    username: postgres
    password: postgres
    driver-class-name: org.postgresql.Driver      
  quartz:
    job-store-type: jdbc
    jdbc:
      initialize-schema: never
    properties:
      org:
        quartz:
          scheduler:
            instanceId: AUTO
            instanceName: quartz-demo-app
          jobStore:
            useProperties: true
            isClustered: true
            clusterCheckinInterval: 5000
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
            dataSource: quartzDataSource
            misfireThreshold: 60000
          dataSource:
            quartzDataSource:
              driver: org.postgresql.Driver
              URL: jdbc:postgresql://localhost:5432/anonymization-job
              user: postgres
              password: postgres
          plugin:
            shutdownHook:
              class: org.quartz.plugins.management.ShutdownHookPlugin
              cleanShutdown: true

0
投票
java.lang.NoSuchMethodException: No setter for property 'datasource'

大多数情况下,此错误是由于您在开发和部署之间使用了错误的版本(或)缺少 jar。检查开发环境中的 jar 并将其与部署环境进行比较。


0
投票

也许这个答案会帮助其他遇到这个问题的人。 添加一个像这样的属性: 春天: 石英: 特性: 组织: 石英: 数据源: 石英数据源: 提供商:hikaricp

原因是quartz缺少连接池的属性。

© www.soinside.com 2019 - 2024. All rights reserved.