我如何将作业从Spring项目持久保存到H2数据库

马克·特鲁兰(Mark Truran):

如何从Spring项目将Quartz作业持久化到H2文件数据库?

我有一个Spring应用程序,该应用程序使用Quartz调度作业。它可以工作,但是当应用程序关闭时,我失去了所有工作。我想将这些作业持久保存到H2数据库(在本地文件中)。我的项目是用gradle构建的。我已经阅读了很多使用各种库的较旧版本构建的示例,但是要么无法使它们正常工作,要么无法在测试项目中复制它们。我阅读了一些看似有用的文档,并在application.properties中尝试了许多不同的设置,但我的应用仍使用内存作业存储中的默认设置启动。

在许多其他事情中,我研究了:

http://www.quartz-scheduler.org/documentation/quartz-2.1.7/configuration/ConfigJobStoreTX.html

http://www.quartz-scheduler.org/documentation/quartz-2.1.7/configuration/ConfigDataSources.html

https://dzone.com/articles/mule-quartz-connector-how-to-use-jdbc-jobstore-ins

https://www.candlepinproject.org/docs/candlepin/quartz_setup.html

application.properties

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate

spring.datasource.driver-class-name=org.h2.Driver  
spring.datasource.url=jdbc:h2:file:~/testqrtz  
spring.datasource.username=admin   
spring.datasource.password=admin  
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect  

spring.h2.console.enabled=true  
spring.h2.console.path=/h2  

build.gradle

plugins {
    id 'org.springframework.boot' version '2.2.0.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {  
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'  
    implementation 'org.springframework.boot:spring-boot-starter-quartz'  
    implementation 'org.springframework.boot:spring-boot-starter-web'  
    runtimeOnly 'com.h2database:h2'  
}

运行此项目时会发生什么

触发器不持久。不会创建石英表。该项目继续使用默认作业存储。此消息在启动时显示:

Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
马克·布拉姆尼克:

我认为问题是,RAMJobStore尽管OP显示已配置了JDBC存储为什么石英仍使用石英

我认为答案是在该项目中用石英进行错误的弹簧集成。

显然,石英以某种默认方式(某种方式使用RAMJobStore以某种方式“启动”

application.properties 定义了所有属性的声音听起来更像是Spring Boot的配置文件,而不是Crystal的配置文件(通常称为quartz.properties)。

通常,您需要定义调度程序bean并指定您想从哪里确切读取配置:

@Bean
public SchedulerFactoryBean scheduler(Trigger trigger, JobDetail job, DataSource 
   quartzDataSource) {
     SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
     schedulerFactory.setConfigLocation(new ClassPathResource("quartz.properties"));
     ...
     schedulerFactory.setJobDetails(job);
     schedulerFactory.setTriggers(trigger);
     schedulerFactory.setDataSource(quartzDataSource);
     return schedulerFactory;
}

这是发生问题的可能原因之一,在此处查找更多详细信息,并全面检查与石英的弹簧集成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我的 Spring 数据库 (H2) 不持久

如何将工期保存到H2数据库中

Spring Boot:H2数据库未保存到文件

如何将H2数据库文件存储到项目目录中

APScheduler 不会将作业保存到 mongodb 数据库中

Hibernate不将数据保存到H2数据库

如何将Joda Date持久保存到sql数据库?

如何将Grails对象持久保存到Grails外部管理的数据库

播放框架2.3.6将日志保存到h2数据库

如何从终端将持久性数据库导出到H2中的内存中数据库

org.hibernate.PersistentObjectException:传递的分离实体与内存数据库中的H2一起持久保存

我如何将数据保存到使用 fetch 创建的数据库中

我如何将多个数据保存到Firebase实时数据库中

如何将PhoneNumberField数据保存到数据库?

如何将数据从tableview保存到数据库?

Portia,如何将数据保存到数据库?

Spring Petclinic 项目 H2 上的数据库连接

我如何使用表格将数据插入我的H2数据库

如何将数据(字符串数组)插入到H2数据库?

H2 数据库 - 为多个 Spring Boot 应用程序使用持久存储

H2 数据库 - 为多个 Spring Boot 应用程序使用持久存储

如何将Beautiful Soup输出保存到我的SQLite数据库中?

如何将电话联系人保存到我自己的数据库中

如何将我的 SQLITE 数据库保存到 Google Drive?

Yii2 如何将接收到的 JSON 数据保存到数据库中

Spring Boot-如何将多对一实体保存到数据库

VisualStudio 2013在项目运行期间持久保存到神秘数据库

如何将JavaScript变量保存到数据库

Laravel,如何将DomDocument保存到数据库?