设为首页 加入收藏

TOP

Quartz 简单使用(二)
2023-07-25 21:32:20 】 浏览:55
Tags:Quartz 简单使
StdSchedulerFactory; public class TaskClient { public static void main(String[] args) { JobDetail jobDetail = JobBuilder.newJob(TaskJob.class) .withIdentity("job1", "group1") .usingJobData("job","jobDetail1.JobDataMap.Value") .usingJobData("name","jobDetail1.name.Value") //通过 setName 自动赋值 .build(); Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "trigger1") .usingJobData("trigger","trigger.JobDataMap.Value") .usingJobData("name","trigger.name.Value") //如果 Trigger 有值,会覆盖 JobDetail .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1) .repeatForever()) .build(); try { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.scheduleJob(jobDetail,trigger); scheduler.start(); } catch (SchedulerException ex) { ex.printStackTrace(); } } }
import org.quartz.*;

public class TaskJob implements Job {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        System.out.println("name => " + name);
    }
}

非并发执行

@DisallowConcurrentExecution job类上,禁止并发地执行同一个job定义 (JobDetail定义的)的多个实例。


import cn.hutool.core.date.DateUtil;
import org.quartz.*;

@DisallowConcurrentExecution
public class TaskJob implements Job {

    @Override
    public void execute(JobExecutionContext context) {
        System.out.println("Time => " + DateUtil.now());
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@PersistJobDataAfterExecution
持久化JobDetail中的JobDataMap(对 trigger 中的 datamap 无效),如果一个任务不是

import cn.hutool.core.date.DateUtil;

import org.quartz.*;

//持久化JobDetail中的JobDataMap(对 trigger 中的 datamap 无效),如果一个任务不是
@PersistJobDataAfterExecution
public class TaskJob implements Job {

    @Override
    public void execute(JobExecutionContext context) {
        JobDataMap triggerMap = context.getJobDetail().getJobDataMap();
        triggerMap.put("count", triggerMap.getInt("count") + 1);
        System.out.println("Time => " + DateUtil.now() + " count =>" + triggerMap.getInt("count"));

    }
}

Client

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class TaskClient {

    public static void main(String[] args) {
        JobDetail jobDetail = JobBuilder.newJob(TaskJob.class)
                .withIdentity("job1", "group1")
                .usingJobData("job","jobDetail1.JobDataMap.Value")
                .usingJobData("name","jobDetail1.name.Value") //通过 setName 自动赋值
                .usingJobData("count",0) //通过 setName 自动赋值
                .build();

        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "trigger1")
                .usingJobData("trigger","trigger.JobDataMap.Value")
                .usingJobData("name","trigger.name.Value")  //如果 Trigger 有值,会覆盖 JobDetail
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1)
                        .repeatForever())
                .build();
        try {
            Scheduler sche
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JdkProxy的进阶知识 下一篇支持JDK19虚拟线程的web框架之四..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目