java quartz持久化_Quartz Spring(java)持久化任务,执行报错

Quartz任务是持久化的,有时执行成功,有时错误:ERRORorg.springframework.scheduling.quartz.LocalDataSourceJobStore(line:2884)-Errorretrievingjob,settingtriggerstatetoERROR.o...

Quartz任务是持久化的,有时执行成功,有时错误: ERROR org.springframework.scheduling.quartz.LocalDataSourceJobStore(line:2884) -Error retrieving job, setting trigger state to ERROR. org.quartz.JobPersistenceException: Couldn't retrieve job because a required class was not found: cc.test.service.impl.PrintJobService [See nested exception: java.lang.ClassNotFoundException: cc.test.service.impl.PrintJobService] at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1392) at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2879) at org.quartz.impl.jdbcjobstore.JobStoreSupport$38.execute(JobStoreSupport.java:2847) at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3760) at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2841) at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:342) 不知道是哪里的原因,大家帮看看。

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解了你的问题。要使用Quartz2.3.2和Spring Boot实现数据库持久化存储多个定时任务,你可以按照以下步骤操作: 1. 在Spring Boot项目中添加Quartz2.3.2的依赖包: ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 创建一个继承了`org.quartz.impl.jdbcjobstore.PostgreSQLDelegate`的类,用于实现PostgreSQL数据库的存储。 ```java public class PostgreSQLDelegateCustom extends PostgreSQLDelegate { private String tablePrefix = ""; public PostgreSQLDelegateCustom() { super(); } @Override public void setInstanceName(String schedName) { super.setInstanceName(schedName); this.tablePrefix = schedName + "."; } @Override public String getSelectNextTriggerToAcquireSql(int maxCount) { return "SELECT * FROM " + tablePrefix + "QRTZ_TRIGGERS WHERE " + "TRIGGER_STATE = ? AND NEXT_FIRE_TIME <= ? " + "AND MISFIRE_INSTR IN (" + MisfireInstruction.IGNORE_MISFIRE_POLICY + "," + MisfireInstruction.SMART_POLICY + ") ORDER BY NEXT_FIRE_TIME ASC"; } @Override public String getSelectNextMisfiredTriggersInStateSql(Connection conn, String state, long ts) { return "SELECT * FROM " + tablePrefix + "QRTZ_TRIGGERS WHERE " + "TRIGGER_STATE = ? AND NEXT_FIRE_TIME <= ? " + "AND MISFIRE_INSTR NOT IN (" + MisfireInstruction.IGNORE_MISFIRE_POLICY + "," + MisfireInstruction.SMART_POLICY + ") ORDER BY NEXT_FIRE_TIME ASC"; } @Override public String getSelectPausedTriggerGroupsSql() { return "SELECT TRIGGER_GROUP FROM " + tablePrefix + "QRTZ_PAUSED_TRIGGER_GRPS"; } @Override public String getSelectPausedTriggerGroupsLikeSql() { return "SELECT TRIGGER_GROUP FROM " + tablePrefix + "QRTZ_PAUSED_TRIGGER_GRPS WHERE TRIGGER_GROUP LIKE ?"; } @Override public String getSelectFiredTriggersSql(int limit) { return "SELECT * FROM " + tablePrefix + "QRTZ_FIRED_TRIGGERS ORDER BY FIRE_TIME ASC LIMIT " + limit; } @Override public String getSelectFiredTriggerSql() { return "SELECT * FROM " + tablePrefix + "QRTZ_FIRED_TRIGGERS WHERE ENTRY_ID = ?"; } @Override public String getInsertPausedTriggerGroupSql() { return "INSERT INTO " + tablePrefix + "QRTZ_PAUSED_TRIGGER_GRPS (TRIGGER_GROUP) VALUES (?)"; } @Override public String getDeletePausedTriggerGroupSql() { return "DELETE FROM " + tablePrefix + "QRTZ_PAUSED_TRIGGER_GRPS WHERE TRIGGER_GROUP = ?"; } @Override public String getDeleteAllPausedTriggerGroupsSql() { return "DELETE FROM " + tablePrefix + "QRTZ_PAUSED_TRIGGER_GRPS"; } @Override public String getInsertFiredTriggerSql() { return "INSERT INTO " + tablePrefix + "QRTZ_FIRED_TRIGGERS (ENTRY_ID, " + "TRIGGER_NAME, TRIGGER_GROUP, " + "IS_VOLATILE, INSTANCE_NAME, " + "FIRED_TIME, SCHED_TIME, " + "PRIORITY, STATE, JOB_NAME, " + "JOB_GROUP, IS_STATEFUL, " + "REQUESTS_RECOVERY, " + "MISFIRE_INSTR) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; } @Override public String getUpdateFiredTriggerSql() { return "UPDATE " + tablePrefix + "QRTZ_FIRED_TRIGGERS SET " + "FIRED_TIME = ?, SCHED_TIME = ?, STATE = ? " + "WHERE ENTRY_ID = ?"; } @Override public String getDeleteFiredTriggerSql() { return "DELETE FROM " + tablePrefix + "QRTZ_FIRED_TRIGGERS WHERE ENTRY_ID = ?"; } @Override public String getDeleteFiredTriggersSql(String instanceId) { return "DELETE FROM " + tablePrefix + "QRTZ_FIRED_TRIGGERS WHERE INSTANCE_NAME = ?"; } @Override public String getSelectInstancesFiredTriggerCountSql() { return "SELECT COUNT(*) FROM " + tablePrefix + "QRTZ_FIRED_TRIGGERS WHERE INSTANCE_NAME = ?"; } } ``` 3. 在Spring Boot配置文件中配置Quartz的相关参数: ```yaml spring: quartz: job-store-type: jdbc properties: org: quartz: scheduler: instanceId: AUTO instanceName: my-scheduler jobStore: driverDelegateClass: com.example.PostgreSQLDelegateCustom useProperties: false isClustered: false dataSource: myDataSource tablePrefix: QRTZ_ threadPool: threadCount: 10 plugin: shutdownhook: class: org.quartz.plugins.management.ShutdownHookPlugin cleanShutdown: true jobHistory: class: org.quartz.plugins.history.LoggingJobHistoryPlugin jobHistoryLogLevel: INFO ``` 4. 创建一个继承了`org.quartz.Job`的类,用于定义任务的具体逻辑: ```java public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 任务逻辑代码 } } ``` 5. 在Spring Boot的任意一个类中添加以下代码,用于配置和启动Quartz Scheduler: ```java @Configuration public class QuartzConfig { @Bean public JobDetail myJobDetail() { return JobBuilder.newJob(MyJob.class) .withIdentity("myJob") .storeDurably() .build(); } @Bean public Trigger myTrigger() { return TriggerBuilder.newTrigger() .forJob(myJobDetail()) .withIdentity("myTrigger") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); } @Bean public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) { SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setDataSource(dataSource); schedulerFactoryBean.setJobDetails(myJobDetail()); schedulerFactoryBean.setTriggers(myTrigger()); return schedulerFactoryBean; } } ``` 6. 最后,你需要在PostgreSQL数据库中创建Quartz所需的表结构。你可以使用Quartz提供的`tables_postgres.sql`文件进行创建。 至此,你已经成功实现了使用Quartz2.3.2和Spring Boot实现数据库持久化存储多个定时任务

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值