pursue wind pursue wind
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
  • mybatis

  • mybatis-plus

  • Spring

  • SpringBoot

    • 文档

      • SpringBoot+Security-发送短信验证码
      • SpringBoot-三大基本注解
      • SpringBoot-多模块
      • Springboot-秒杀项目
      • SpringBoot2-0响应式编程系列(一)-导读
      • SpringBoot统一异常处理
      • SpringBoot集成BootStrap
      • SpringBoot集成RabbitMQ
      • Springboot集成Thymeleaf
      • SpringBoot集成Thymeleaf模板
    • Log4j2配置
    • SpingBoot整合AOP
    • Spring Boot 2发送邮件手把手图文教程
    • Spring Boot 2实现分布式锁——这才是实现分布式锁的正确姿势!
    • Spring Boot 启动配置原理
    • SpringBoot 启动 Banner
    • SpringBoot 定时任务
      • 导入依赖
      • 实现quartz的Job接口
      • Service
      • 测试
    • SpringBoot 引入本机jar包 配置
    • SpringBoot 线程池配置 定时任务,异步任务
  • SpringSecurity

  • SpringCloud

  • 单元测试框架Mockito
  • 框架
  • SpringBoot
pursuewind
2020-11-23
目录

SpringBoot 定时任务

# 导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
1
2
3
4

# 实现quartz的Job接口

package org.pocket.transaction.center.job;

import lombok.extern.slf4j.Slf4j;
import org.pocket.common.dto.accmgr.RedEnvelopeAns;
import org.pocket.common.dto.accmgr.RedEnvelopeReq;
import org.pocket.transaction.center.feign.TxMgrService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @author: mirror
 * @create: 2019-09-17 11:50
 */
@Slf4j
public class RedEnvelopeJob implements Job {

    public static final String RED_ENVELOPE_JOB_KEY = "addRedEnvelopeInvalidTask";

    @Autowired
    private TxMgrService txMgrService;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        log.info(" ----- 红包失效,任务开始:{}", jobExecutionContext.getJobDetail().getJobDataMap().get(RED_ENVELOPE_JOB_KEY));
        RedEnvelopeAns redEnvelopeAns = txMgrService.rejectRedEnvelope((RedEnvelopeReq) jobExecutionContext.getJobDetail().getJobDataMap().get(RED_ENVELOPE_JOB_KEY));
        log.info(" ----- 红包失效,任务结束,结果:{}", redEnvelopeAns);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# Service

package org.pocket.transaction.center.service.impl;

import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.pocket.common.dto.accmgr.RedEnvelopeReq;
import org.pocket.transaction.center.job.RedEnvelopeJob;
import org.pocket.transaction.center.service.TcRedEnvelopeService;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.stereotype.Service;

import java.util.HashMap;

/**
 * @author mirror
 */
@Service
@Slf4j
public class TcRedEnvelopeServiceImpl implements TcRedEnvelopeService {

    private static final int ONE_DAY = 1;
    private static final String RED_ENVELOPE_TASK_GROUP = "red_envelope_group";

    @Override
    public void addRedEnvelopeInvalidTask(RedEnvelopeReq redEnvelopeReq) {
        try {
            //1、获得一个scheduler
            SchedulerFactory sf = new StdSchedulerFactory();
            Scheduler scheduler = sf.getScheduler();
            //2、获得一个jobDetail
            HashMap<Object, Object> map = Maps.newHashMap();
            map.put(RedEnvelopeJob.RED_ENVELOPE_JOB_KEY, redEnvelopeReq);
            JobDetail jobDetail = JobBuilder
                    .newJob(RedEnvelopeJob.class)
                    .setJobData(new JobDataMap(map))
                    .withIdentity(redEnvelopeReq.getTxid())
                    .build();

            //3、获得一个trigger
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity(redEnvelopeReq.getTxid(), RED_ENVELOPE_TASK_GROUP)
                    .startAt(DateTime.now().plusDays(ONE_DAY).toDate())
                    .build();
            //4、把任务和触发器放到scheduler中
            scheduler.scheduleJob(jobDetail, trigger);
            //5、开始任务调度
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# 测试

@PostMapping("/testjob")
public void test(String id) {
    try {
        //1、获得一个scheduler
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler scheduler = sf.getScheduler();
        //2、获得一个jobDetail
        HashMap<Object, Object> map = Maps.newHashMap();
        map.put(RED_ENVELOPE_JOB_KEY, id);
        JobDetail job = JobBuilder
                .newJob(RedEnvelopeJob.class)
                //传入数据
                .setJobData(new JobDataMap(map))
                //设置标识
                .withIdentity(id)
                .build();
        //3、获得一个trigger
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity(id, "group1")
                //什么时候开始,或者是立即开始.startNow()
                .startAt(DateTime.now().plusSeconds(5).toDate())
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        //多少间隔内重复
                        .withIntervalInSeconds(5)
                        //循环次数
                        .withRepeatCount(0))
                .build();
        //4、把任务和触发器放到scheduler中
        scheduler.scheduleJob(job, trigger);
        //5、开始任务调度
        scheduler.start();
    } catch (SchedulerException e) {
        e.printStackTrace();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Last Updated: 2023/01/30, 11:01:00
SpringBoot 启动 Banner
SpringBoot 引入本机jar包 配置

← SpringBoot 启动 Banner SpringBoot 引入本机jar包 配置→

Theme by Vdoing | Copyright © 2019-2023 pursue-wind | 粤ICP备2022093130号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜
  • 网络DJ