Quartz 使用

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
package s.simple;
import org.quartz.*;
import java.text.SimpleDateFormat;
import java.util.Date;
 
/**
 * @Title: HelloJob
 * @ProjectName quartz
 * @date 2019/6/2513:52
 * 实现任务逻辑的接口Job
 */
public class HelloJob implements Job {
    private String testParam;
 
    public void setTestParam(String testParam) {
        this.testParam = testParam;
    }
 
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        Date date = new Date();
        SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sfd.format(date);
        System.out.println("当前系统时间: "+ format);
 
        // 值获取2种方式
        // 1.获取jobDetailMap 和 TriggerDataMap
        JobDataMap jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();
        JobDataMap jobDataMap1 = jobExecutionContext.getJobDetail().getJobDataMap();
        // 合并后的Map Trgger会覆盖Detail中的key
        JobDataMap mergedJobDataMap = jobExecutionContext.getMergedJobDataMap();
        String message1 = mergedJobDataMap.getString("message");
        // 2.传值方式也可以通过属性方式,需要定义set方法
        System.out.println(testParam);
 
        // 获取开始和结束时间
        Trigger trigger = jobExecutionContext.getTrigger();
        Date startTime = trigger.getStartTime();
        String s_time = sfd.format(startTime);
        System.out.println("开始时间:"+startTime);
        Date endTime = trigger.getEndTime();
        System.out.println("结束时间:"+sfd.format(endTime));
 
 
    }
}

 

Scheduler
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package s.simple;
 
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
 
import java.text.SimpleDateFormat;
import java.util.Date;
 
/**
 * @Title: HelloScheduler
 * @ProjectName quartz
 * @date 2019/6/2513:58
 */
public class HelloScheduler {
    public static void main(String[] args) {
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("testParam","JobDetail");
        JobDataMap jobDataMap2 = new JobDataMap();
        jobDataMap2.put("message","Trigger");
        // 打印当前时间
        Date date = new Date();
        Date date2 = new Date();
        Date endDate = new Date();
        SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sfd.format(date);
        System.out.println("current exec time is "+ format);
        date.setTime(date.getTime()+3000);  // 当前时间3秒
        date2.setTime(date2.getTime()+4000);  // 当前时间4秒
        endDate.setTime(endDate.getTime()+6000);  // 当前时间6秒后停止
        // 创建jobDetail 并绑定helloJob
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").usingJobData(jobDataMap).build();
        /**
         * Trigger作用是执行Job,告诉调度程序什么时候触发
         * 创建Trigger 立即执行,并每隔2秒执行,重复永远
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")
                    .usingJobData(jobDataMap2)
                    .startAt(date).endAt(endDate) // 开始时间和结束时间
                    .withSchedule(SimpleScheduleBuilder
                    .simpleSchedule()
                    .withIntervalInSeconds(2)
                    .repeatForever())
                    .build();
         */
        /**
         * SimpleTrigger
         * 距离当前时间4秒后首次执行,之后每两秒重复执行一次
        SimpleTrigger trigger = TriggerBuilder
                     .newTrigger()
                     .withIdentity("myTrigger", "group1")
                        .usingJobData(jobDataMap2)
                        .startAt(date2) // 4秒后开始时间
                        .withSchedule(SimpleScheduleBuilder
                        .simpleSchedule()
                        .withIntervalInSeconds(2)  // 重复间隔
                        .withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)) // 重复次数
                .build();
        */
        /**
         * CronTrigger 使用
         *  1. (* * * * * ? *) 每秒触发一次
         *  2. (* 15 10 ? * * 2017)  2017年每天10.15触发一次
         */
        CronTrigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")
                .usingJobData(jobDataMap2)
                .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
                .build();
        // 创建Scheduler示例
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        try {
            Scheduler scheduler = schedulerFactory.getScheduler();
            scheduler.scheduleJob(jobDetail, trigger);
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
 
 
    }
}

  

 

posted @   qukaige  阅读(188)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示