maven
3 天以前 a78fb9a836c51b5b569b2c7da32d4d2fc2b58925
yys  数据持久化
已修改3个文件
45 ■■■■■ 文件已修改
src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java
@@ -1,5 +1,7 @@
package com.ruoyi.inspectiontask.service.impl;
import org.quartz.JobDataMap;
import org.quartz.Scheduler;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
@@ -7,13 +9,40 @@
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
import javax.sql.DataSource;
@Configuration
public class QuartzConfig {
    @Autowired
    private ApplicationContext applicationContext;
    // 假设已配置名为dataSource的数据源Bean
    @Autowired
    private DataSource dataSource;
    @Bean
    public JobDetailFactoryBean jobDetail() {
        JobDetailFactoryBean factory = new JobDetailFactoryBean();
        factory.setJobClass(TimingTaskJob.class); // 你的自定义 Job 类(需实现 Job 接口)
        // 1. 核心:设置为持久化任务(必须,否则不写入 qrtz_job_details 或重启清理)
        factory.setDurability(true);
        // 2. 可选:任务执行崩溃后,重启时是否恢复执行(建议开启)
        factory.setRequestsRecovery(true);
//        // 3. 可选:设置 JobDataMap(若需传递参数,参数需可序列化)
//        JobDataMap jobDataMap = new JobDataMap();
//        jobDataMap.put("key", "value"); // 示例参数(若参数是自定义对象,需实现 Serializable)
//        factory.setJobDataMap(jobDataMap);
        return factory;
    }
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
@@ -24,10 +53,17 @@
        jobFactory.setApplicationContext(applicationContext);
        schedulerFactory.setJobFactory(jobFactory);
        // 在schedulerFactoryBean()方法中添加
        schedulerFactory.setDataSource(dataSource);
        // 其他配置...
        return schedulerFactory;
    }
    @Bean
    public Scheduler scheduler() {
        return schedulerFactoryBean().getScheduler();
    }
    // 自定义JobFactory,支持自动注入
    public static class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory
            implements ApplicationContextAware {
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -13,6 +13,7 @@
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.io.Serializable;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -23,7 +24,8 @@
@Component
@DisallowConcurrentExecution // 禁止并发执行同一个Job
public class TimingTaskJob implements Job {
public class TimingTaskJob implements Job, Serializable {
    private static final long serialVersionUID = 1L; // 必须定义序列化ID
    @Autowired
    private TimingTaskMapper timingTaskMapper;
src/main/resources/application-dev.yml
@@ -35,6 +35,7 @@
# 日志配置
logging:
  level:
    org.quartz: DEBUG
    com.ruoyi: warn
    org.springframework: warn
@@ -160,7 +161,7 @@
  quartz:
    job-store-type: jdbc  # 使用数据库存储
    jdbc:
      initialize-schema: always  # 首次运行时自动创建表结构,成功后改为never
      initialize-schema: never  # 首次运行时自动创建表结构,成功后改为never
      schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql  # MySQL表结构脚本
    properties:
      org:
@@ -171,7 +172,7 @@
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate  # MySQL适配
            tablePrefix: QRTZ_  # 表名前缀,与脚本一致
            tablePrefix: qrtz_  # 表名前缀,与脚本一致
            isClustered: false  # 单节点模式(集群需改为true)
            clusterCheckinInterval: 10000
            txIsolationLevelSerializable: true