springboot整合quartz不持久化+注意事项

第一步

 导入坐标

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
            <version>${spring-boot-starter-quartz.version}</version>
<!--            <version>3.1.4</version>-->
        </dependency>

这里说一下 在创建springboot项目时可以选择i/o 中的quartz 就不需要自己在手动写入这个坐标名称了

第二步 

配置yml文件

server:
  port: 83
logging:
  level:
    root: info
spring:
  redis:
    database: 1
    host: 127.0.0.1
    port: 6379
    timeout: 30000
    jedis:
      pool:
        max-idle: 50
        max-active: 20
        min-idle: 4
  # Quartz 的配置,对应 QuartzProperties 配置类
  quartz:
    job-store-type: memory # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
    auto-startup: true # Quartz 是否自动启动
    startup-delay: 0 # 延迟 N 秒启动
    wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
    overwrite-existing-jobs: true # 是否覆盖已有 Job 的配置
    properties: # 添加 Quartz Scheduler 附加属性
      org:
        quartz:
          threadPool:
            threadCount: 25 # 线程池大小。默认为 10 。
            threadPriority: 5 # 线程优先级
            class: org.quartz.simpl.SimpleThreadPool # 线程池类型
          scheduler:
            instanceName: ClearJob
    #    jdbc: # 这里暂时不说明,使用 JDBC 的 JobStore 的时候,才需要配置

第三步

创建任务类实现QuartzJobBean 并重写executeInternal方法,这个里面就是可以放需要定时执行的程序比如我这里是定时清理图片

import com.it.constant.RedisConstant;
import com.it.utils.QiniuUtils;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import redis.clients.jedis.JedisPool;

import java.util.Set;

public class ClearJob extends QuartzJobBean {
    @Autowired
    private JedisPool jedisPool;
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        this.clearImg();
    }
    public void clearImg() {
        System.out.println("开始quartz---------------");
        //根据Redis中保存的两个set集合进行差值计算,获得垃圾图片的集合  sdiff会返回差值集合
        Set<String> set = jedisPool.getResource().sdiff(RedisConstant.SETMEAL_PIC_RESOURCES, RedisConstant.SETMEAL_PIC_DB_RESOURCES);
        if (set != null) {
            for (String picName : set) {
                //删除七牛云服务器上的图片
                QiniuUtils.deleteFileFromQiniu(picName);
                //从Redis中删除集合的名称
                jedisPool.getResource().srem(RedisConstant.SETMEAL_PIC_RESOURCES, picName);
                System.out.println("清理了"+picName);

            }
        }

    }
}

第四步

设置好了需要定时执行的程序后,需要了解

ob/JobDetail: 任务
任务指的是你要做的事,也是任务调度的核心,比如我想要每隔一个小时喝一杯水,那么任务就是“喝水”
Trigger: 触发器
触发器指的是任务触发的时间,也就是任务在什么时间开始执行。例如上一句喝水的例子,“每隔一个小时”,这就是一个触发器,触发器具有两种定时类型,一种简单定时,一种使用Cron时间表达式进行复杂定时。
需要配置的是这个JobDetail和Trigger

import org.quartz.*;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(ClearJob.class)
                //指定任务名称
                .withIdentity("ClearJob","group1")
                .withDescription("任务描述:定时清理图片")
                //每次任务执行后进行存储
                .storeDurably(true)
                .build();

    }

    @Bean
    public Trigger trigger() {
        //设置Cron时间表达式,此处也可用SimpleScheduleBuilder
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ? ");

        //创建触发器
        return TriggerBuilder.newTrigger()
                //绑定工作任务
                .forJob(jobDetail())
                .withIdentity("trigger","group1")
                //每隔5秒执行一次job
                .withSchedule(cronScheduleBuilder)
//                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))
                .build();
    }

第五步

检查启动类的位置

运行结果如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值