返回顶部
首页 > 资讯 > 精选 >Java中的Quartz如何使用
  • 227
分享到

Java中的Quartz如何使用

2023-07-06 01:07:34 227人浏览 独家记忆
摘要

今天小编给大家分享一下Java中的Quartz如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Scheduler 每次

今天小编给大家分享一下Java中的Quartz如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Scheduler 每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题(jobDetail的实例也是新的)

Quzrtz 定时任务默认都是并发执行,不会等待上一次任务执行完毕,只要间隔时间到就会执行,如果定时任务执行太长,会长时间占用资源,导致其它任务堵塞

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

Java中的Quartz如何使用

  • scheduler:可以理解为定时任务的工作容器或者说是工作场所,所有定时任务都是放在里面工作,可以开启和停止。

  • trigger:可以理解为是定时任务任务的工作规则配置,例如说,没个几分钟调用一次,或者说指定每天那个时间点执行。

  • jobDetail:定时任务的信息,例如配置定时任务的名字,群组之类的。

  • job:定时任务的真正的业务处理逻辑的地方。

简单示例

TestClient.Java

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")  //设置JOB的名字和组                .build();        Trigger trigger = TriggerBuilder.newTrigger()                .withIdentity("trigger1", "trigger1")                .startNow()                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1)                        .repeatForever())                .build();        try {            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();            scheduler.scheduleJob(jobDetail,trigger);            scheduler.start();        } catch (SchedulerException ex) {            ex.printStackTrace();        }    }}

TaskJob.Java

import cn.hutool.core.date.DateUtil;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class TaskJob implements Job {    @Override    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {        System.out.println("TaskJob => " + DateUtil.now());    }}

Java中的Quartz如何使用

usingJobData

通过 usingJobData 往定时任务中传递参数

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")                .build();        Trigger trigger = TriggerBuilder.newTrigger()                .withIdentity("trigger1", "trigger1")                .usingJobData("trigger","trigger.JobDataMap.Value")                .startNow()                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1)                        .repeatForever())                .build();        try {            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();            scheduler.scheduleJob(jobDetail,trigger);            scheduler.start();        } catch (SchedulerException ex) {            ex.printStackTrace();        }    }}

TaskJob.java

import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class TaskJob implements Job {    @Override    public void execute(JobExecutionContext context) throws JobExecutionException {        JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();        JobDataMap triggerMap = context.getTrigger().getJobDataMap();        JobDataMap mergeMap = context.getMergedJobDataMap();        System.out.println("jobDataMap => " + jobDataMap.getString("job"));        System.out.println("triggerMap => " + triggerMap.getString("trigger"));        System.out.println("mergeMap => " + mergeMap.getString("trigger"));    }}

Java中的Quartz如何使用

通过属性赋值

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 自动赋值                .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.*;@DisallowConcurrentExecutionpublic 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 无效),如果一个任务不是@PersistJobDataAfterExecutionpublic 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 scheduler = StdSchedulerFactory.getDefaultScheduler();            scheduler.scheduleJob(jobDetail,trigger);            scheduler.start();        } catch (SchedulerException ex) {            ex.printStackTrace();        }    }}

以上就是“Java中的Quartz如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Java中的Quartz如何使用

本文链接: https://lsjlt.com/news/357300.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中的Quartz如何使用
    今天小编给大家分享一下Java中的Quartz如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Scheduler 每次...
    99+
    2023-07-06
  • 详解Java中Quartz的简单使用
    目录简单示例usingJobData非并发执行Scheduler 每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题(jobDetail的实例也...
    99+
    2023-05-15
    Java Quartz使用 Java Quartz
  • java quartz怎么使用
    使用Java Quartz有以下步骤:1. 导入Quartz依赖库,例如在Maven项目中,在pom.xml文件中添加以下依赖:``...
    99+
    2023-08-31
    java quartz
  • 在Spring中使用Quartz
    在Spring中使用Quartz,需要进行以下步骤:1. 添加依赖:在项目的pom.xml文件中添加Quartz的依赖。```xml...
    99+
    2023-09-15
    Spring
  • Quartz在.NET中的使用教程
    目录一、背景二、Quartz三、传递参数四、在scheduler中注册监听器五、可视化管理界面六、配置文件配置任务一、背景 例如需要在某年某月去将数据库的某个数据更新或者同步,又或者...
    99+
    2024-04-02
  • Java中简单实用Quartz概述
    目录1.Quartz是什么2. Quartz谁维护?3. 简单的应用3.1 需求描述3.1.1. Spring中自带的3.1.2. Quartz的简单使用4. Quartz相较Spr...
    99+
    2023-02-15
    java  quartz java  quartz使用
  • Java Quartz触发器CronTriggerBean怎么使用
    要使用Java Quartz触发器CronTriggerBean,您需要按照以下步骤进行操作:1. 创建一个CronTriggerB...
    99+
    2023-08-08
    Java CronTriggerBean
  • java任务调度quartz怎么使用
    要使用Quartz任务调度器,您需要按照以下步骤进行操作:1. 首先,您需要添加Quartz的依赖项到您的项目中。您可以在Maven...
    99+
    2023-08-14
    java quartz
  • Quartz在.NET中怎么使用
    本篇内容主要讲解“Quartz在.NET中怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Quartz在.NET中怎么使用”吧!一、背景例如需要在某年某月去将数据库的某个数据更新或者同步,...
    99+
    2023-06-25
  • quartz的线程占用如何看
    要检查Quartz框架的线程占用情况,可以使用以下方法:1. 使用操作系统的工具:可以使用操作系统提供的工具,如Windows的任务...
    99+
    2023-09-18
    quartz
  • Spring如何使用quartz实现定时作业
    本篇内容主要讲解“Spring如何使用quartz实现定时作业”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring如何使用quartz实现定时作业”吧!定时批处理作业是J2EE企业应用里很...
    99+
    2023-06-03
  • Java任务调度框架Quartz怎么使用
    本篇内容介绍了“Java任务调度框架Quartz怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! Quartz相较于Time...
    99+
    2023-06-22
  • 如何使用Java中的Optional
    这篇文章主要介绍如何使用Java中的Optional,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!从Java8 引入的一个很有趣的特性是Optional类。Optional类主要解决的问题是臭名昭著的空指针异常(Nu...
    99+
    2023-06-17
  • java中的format如何使用
    在Java中,可以使用`String.format()`方法来格式化字符串。该方法使用格式字符串和可选的参数,返回一个格式化后的字符...
    99+
    2023-09-27
    java
  • java中的super如何使用
    今天小编给大家分享一下java中的super如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。继承supersuper关...
    99+
    2023-06-29
  • Java中的map如何使用
    这篇文章给大家介绍Java中的map如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Map与Collection提到Map集合接口就不能不提到Collection集合接口,map和Collection都是集合接口...
    99+
    2023-05-30
    java map
  • Java中的Semaphore如何使用
    目录简介简述实现原理方法介绍案例分析适用场景简介 semaphore中文意思既是信号量,它的主要功能就是用来控制某个资源同时被访问的线程数。 为了控制某块资源的并发访问量时,可以使用...
    99+
    2024-04-02
  • Java中的PrintWriter如何使用
    在Java中,PrintWriter可以用于向输出流中写入字符数据。以下是使用PrintWriter的一些常见操作:1. 创建Pri...
    99+
    2023-08-12
    Java PrintWriter
  • Java中的Thread.join()如何使用
    Thread.join()方法用于等待一个线程执行完成。它可以在一个线程中调用另一个线程的join()方法,使得当前线程等待被调用线...
    99+
    2023-08-12
    Java Thread.join()
  • java中的this如何使用
    这篇文章主要介绍“java中的this如何使用”,在日常操作中,相信很多人在java中的this如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中的this如何使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作