org.quartz.SchedulerConfigException:未设置数据源名称

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

升级 spring-boot(从

2.3.12.RELEASE
2.7.6
)和 spring cloud(从
3.0.3
3.1.5
)后,我开始收到以下错误

Caused by: org.quartz.SchedulerConfigException: DataSource name not set.
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.initialize(JobStoreSupport.java:643)
    at org.quartz.impl.jdbcjobstore.JobStoreTX.initialize(JobStoreTX.java:57)
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1368)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1579)
    at org.springframework.scheduling.quartz.SchedulerFactoryBean.createScheduler(SchedulerFactoryBean.java:679)
    at org.springframework.scheduling.quartz.SchedulerFactoryBean.prepareScheduler(SchedulerFactoryBean.java:616)
    at org.springframework.scheduling.quartz.SchedulerFactoryBean.afterPropertiesSet(SchedulerFactoryBean.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)

基于此建议https://github.com/spring-projects/spring-framework/issues/27709#issuecomment-988526589

我已经添加了

org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX

致我的

application.yml

但我在测试执行过程中仍然遇到此错误。

我的依赖:

</properties>
   <spring-boot.version>2.7.6</spring-boot.version>
   ...
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
 ...
<dependencyManagement>
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-oauth2-client</artifactId>
      <exclusions>
        <exclusion>
          <groupId>com.nimbusds</groupId>
          <artifactId>oauth2-oidc-sdk</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <!--         tracing -->
    <dependency>
      <groupId>io.opentracing.contrib</groupId>
      <artifactId>opentracing-spring-jaeger-web-starter</artifactId>
    </dependency>

    <!-- for quartz logic -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-quartz</artifactId>
    </dependency>

    <!-- actuator & metric-->
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

 <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bus-kafka</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-context</artifactId>
    </dependency>

    <!-- test -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <scope>test</scope>
    </dependency>
    ...

我该如何修复?

更新

我还尝试添加到我的应用程序yaml:

spring:
  quartz:
    properties:
      org:
        quartz:
          jobStore:
            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
            driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
            tablePrefix: TB_PR_QRTZ_

并用

@QuartzDataSource

标记这个 beasn
@Bean
@QuartzDataSource
public DataSource testDataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(env.getProperty("spring.datasource.driverClassName"));
    dataSource.setUrl(TestContainersRunner.JDBC_URL);
    dataSource.setUsername(env.getProperty("spring.datasource.username"));
    dataSource.setPassword(env.getProperty("spring.datasource.password"));
    return dataSource;
}

但还是没有运气

java spring spring-boot quartz-scheduler
2个回答
2
投票

尝试将您的 Bean 标记为

@Primary

如果它不起作用,或者如果您有多个数据源 bean,我会在下面提供适合我的特定情况的解决方案。

如何在quartz调度中设置数据源。 [错误] org.quartz.SchedulerException:无法初始化数据源:myDS

基本上,您不需要提供 Spring 数据源属性,而是将数据源定义为quartz 特定的数据源

spring:
  datasource:
    byq:
      url: jdbc:oracle:thin:@//app-db/schema-name
      driverClassName: oracle.jdbc.OracleDriver
      username: ZZZ
      password: XXX
  quartz:
    job-store-type: jdbc
    wait-for-jobs-to-complete-on-shutdown: true
    jdbc:
      initialize-schema: never
    properties:
      org:
        quartz:
          dataSource:
            quartzDataSource:
              URL: jdbc:postgresql://scheduler-db/scheduler
              driver: org.postgresql.Driver
              user: ZZZ
              password: XXX
          jobStore:
            dataSource: quartzDataSource
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
            tablePrefix: TB_QRTZ_

希望有帮助


0
投票

您已配置为

org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX

更改为

org.quartz.jobStore.class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
© www.soinside.com 2019 - 2024. All rights reserved.