Quartz 定时任务(Scheduler)的 3 种实现方式

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

PS:第 3 种最简单。

一、引入 jar 。

   <!-- quartz 定时任务调度 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.2.1</version></dependency>

二 、实现方式 一

1. 定义好定时任务的业务内容:

package gentle.test;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;import java.util.Date;/*** @author silence* @date 2018/7/17 11:37*/
@Service("show")
public class Show implements Job {private static Logger _log = LoggerFactory.getLogger(Show.class);@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {_log.info("\n\n-------------------------------\n " +"It is running and the time is : " + new Date()+"\n-------------------------------\n");}}

2. 声明定时任务,并关联业务实现类 。在 JobDetail jb = JobBuilder.newJob(Show.class) 中关联业务类 。

package gentle.test;import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;import java.util.Date;/*** @author silence* @date 2018/7/17 11:36*/
@Service("schedulerTest")
public class SchedulerTest {private static Logger _log = LoggerFactory.getLogger(Scheduler.class);public static void main(String[] args) {try {//1.创建Scheduler的工厂SchedulerFactory sf = new StdSchedulerFactory();//2.从工厂中获取调度器实例Scheduler scheduler = sf.getScheduler();//3.创建JobDetailJobDetail jb = JobBuilder.newJob(Show.class) // Show 为一个job,是要执行的一个任务。.withDescription("这是我的测试定时任务。") //job的描述.withIdentity("jy2Job", "jy2Group") //job 的name和group.build();//任务运行的时间,SimpleSchedle类型触发器有效long time = System.currentTimeMillis() + 3 * 1000L; // 3秒后启动任务Date statTime = new Date(time);//4.创建Trigger//使用SimpleScheduleBuilder或者CronScheduleBuilderTrigger t = TriggerBuilder.newTrigger().withDescription("").withIdentity("jyTrigger", "jyTriggerGroup")//.withSchedule(SimpleScheduleBuilder.simpleSchedule()).startAt(statTime)  //默认当前时间启动 ,也可以写为:.startNow();.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次.build();//5.注册任务和定时器scheduler.scheduleJob(jb, t);//6.启动 调度器scheduler.start();_log.info("启动时间 : " + new Date());} catch (Exception e) {_log.info("定时任务出现异常 : " + e);}}
}

3. 运行成功:

 

实现方式 二 。

1. 定义好定时任务的业务内容:

package gentle.test;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;import java.util.Date;/*** @author silence* @date 2018/7/17 11:37*/
@Service("show")
public class Show implements Job {private static Logger _log = LoggerFactory.getLogger(Show.class);@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {_log.info("\n\n-------------------------------\n " +"It is running and the time is : " + new Date()+"\n-------------------------------\n");}}

2. 定义好定时任务的触发类,调用业务类中的实现 。

package gentle.test;import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;public class UserSyncTask {private final Logger logger = LoggerFactory.getLogger(this.getClass());@ResourceShow show;public void cronDepartmentsAndUsersJob() {logger.info("\n\n 定时--开始,当前时间: " + dateFormat().format(new Date()));try {show.execute(null);} catch (JobExecutionException e) {e.printStackTrace();}logger.info("\n\n 定时--结束,当前时间:" + dateFormat().format(new Date()));}private SimpleDateFormat dateFormat() {return new SimpleDateFormat("HH:mm:ss");}
}

3. 配置文件中 配置触发类和任务执行频率 。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"><!--定时任务触发类--><bean id="userSyncTask" class="gentle.test.UserSyncTask"></bean><!--执行频率--><task:scheduled-tasks><!--每 2 秒执行一次--><task:scheduled ref="userSyncTask" method="cronDepartmentsAndUsersJob" cron="0/2 * * * * ?" /></task:scheduled-tasks></beans>

4. 运行成功:

 

实现方式 三 。

1. 引入 jar , 同上。

2. 运行类 代码中只要给 2 个注解就可以了:

@EnableScheduling  // 开启定时器、

@Scheduled(fixedDelay = 2000)  或者 @Scheduled(cron = "* * 2 * * ?")   // 每 2s 执行 1 次 。

代码:

package gentle.test;import gentle.util.DateUtil;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.util.Date;/*** 定时任务 -- 简版* @author silence* @date 2018/7/31 16:03*/@Component // 注册为一个bean
@EnableScheduling // 开启定时器
public class Sender {private final org.slf4j.Logger logger = LoggerFactory.getLogger(this.getClass());@Scheduled(fixedDelay = 2000) // 每 2s 执行1次。public void send() {logger.info(" \n------------------------\n " +"定时任务内容 :" + DateUtil.dateFormat().format(new Date()) +"\n------------------------\n");}
}

3. 运行效果:

 

源码地址:定时任务demo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加速财务自由的7种理财方法

有人说财务自由是个遥不可及的路&#xff0c;有人却觉得想要在财务上成功很简单&#xff0c;到底财务自由有没有一个正确的方法或是被证明的技巧可以被实现&#xff1f;如果你现在还没达成或是正在达成&#xff0c;底下这7种简单有效的行动与方法可以加速你建构财务自由之路。 …

Code Chef December Challenge 2018题解

传送门 \(MAXEP\) 二分&#xff0c;不过二分的时候要注意把\(mid\)设成\(\left\lfloor{9lr\over 10}\right\rfloor\)&#xff0c;这样往右的次数不会超过\(6\)次 //minamoto #include<bits/stdc.h> #define R register #define inline __inline__ __attribute__((always_…

Git 安装及 idea 配置 Git

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.git官网下载地址&#xff1a;点此跳转git官网 git具体安装不做详细叙述。 2.打开idea 点击Configure -> Settings 3.选择Git 找到…

创业成功需早起?看看IT大佬们的作息时间

有人说&#xff0c;在一个企业里&#xff0c;级别的高低与越起越早现象呈坐标曲线型&#xff0c;也就是说&#xff0c;一开始进职场都嗜睡&#xff0c;有了一定级别就开始早起&#xff0c;随着级别的升高&#xff0c;起床的时间也越来越早&#xff0c;到了级别特高了&#xff0…

第六章学习小结

本章学习了图的结构及应用&#xff0c; 首先是图的分类&#xff0c;图分为无向图、有向图、完全图、连通图、强连通图、带权图、稀疏图、稠密图等等。 图的存储方式有两大类&#xff0c;以边集合方式的表示法和以链接方式的表示法。其中&#xff0c;以边集合方式表示的为邻接矩…

大数据薪资一再飙升 学习大数据需要哪些基础?

2018年6月19日&#xff0c;备受关注的个人所得税法修正案草案迎来第七次大修&#xff0c;个税起征点由每月3500元提高至每月5000元(每年6万元)。对于大多数人来说这绝对是个好消息&#xff0c;但人们更愿意参加培训班实现高薪。近年来&#xff0c;随着互联网的飞速发展以及企业…

idea 玩转 码云 -- idea安装码云插件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在git盛行的今天&#xff0c;码云成为中国程序员的第二github&#xff0c;而且还可以免费使用私人空间。下面就开始码云之旅吧。 0.创建…

阿里云的物联网之路

阿里云的物联网之路 作者 | 刘洪峰 责编 | 唐小引 本文首发于 CSDN 微信&#xff08;ID&#xff1a;CSDNnews&#xff09; 原文链接 未来十到二十年&#xff0c;大家基本已经形成了一个共识&#xff0c;那便是新格局的奠定将由 AI 和物联网技术来支撑。放眼国内&#xff0c;在…

不是所有人都懂这样做,你若做了就能高升!

有句话这样说的&#xff0c;成功的人往往都是做着别人不愿意或不知道的事情&#xff0c;懂得付出才会获得成功&#xff01; 同样的道理&#xff0c;身在职场&#xff0c;每个人都有一种被提拔&#xff0c;晋升的愿望。 不过&#xff0c;光想着没用&#xff0c;除了干好自身工…

面向对象-多态,反射

抽象父类 # 抽象父类&#xff1a;拥有抽象方法(子类共有的方法&#xff0c;但是父类不能有具体的实现体)的父类 # 抽象方法&#xff1a;方法名是具体的&#xff0c;但是实现体是抽象的(在子类中重写来具象化) ​ # 注意点&#xff1a;有抽象方法的父类不能被实例化&#…

解决 : Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 报错如题&#xff1a; RollbackException: Transaction marked as rollbackOnly 2. 原因是在一个事物 (Transaction) 中有另外一个…

yii2 migrate 数据库迁移的简单分享

开发中经常会用到的方法小结&#xff1a; 1、./yii migrate xxx_xx 在表中插入某字段 &#xff1a; public function up(){$this->addColumn({{application_service}}, auditor, INT(10) NOT NULL COMMENT "审核人" AFTER user_id, CHANGE COLUMN status status t…

养不教 父母之过:10个不能靠老师解决的孩子教育问题

1、写字和握笔姿势。 如果你经历孩子成长的整个过程&#xff0c;你会感悟到&#xff0c;孩子写一手帅气的钢笔字&#xff0c;是非常有价值的技能。把字写好&#xff0c;是每一个家长的责任。如果你还年轻&#xff0c;不知道怎么教育孩子&#xff0c;那就从这一点开始吧。 记…

jpa : criteria 作排除过滤、条件中除去查出的部分数据、JPA 一个参数可查询多个字段

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 PS &#xff1a; mybatis 中也有对于 criteria 的使用&#xff0c;见另一文章&#xff1a;mybatis &#xff1a;Criteria 查询、条件过滤…

将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定

将你的前端应用打包成docker镜像并部署到服务器&#xff1f;仅需一个脚本搞定1.前言前段时间&#xff0c;自己搞了个阿里云的服务器。想自己在上面折腾&#xff0c;但是不想因为自己瞎折腾而污染了现有的环境。毕竟&#xff0c;现在的阿里云已经没有免费的快照服务了。要想还原…

CVPR2014: DeepID解读

上周五就要发的&#xff0c;拖........拖.......拖到现在&#xff0c;文中有不准确的地方&#xff0c;欢迎批评指正。DeepID是一种特征提取的算法&#xff0c;由港中文汤晓鸥团队于2014年提出&#xff0c;发表于CVPR2014。其应用领域是人脸识别的子领域——人脸验证&#xff0c…

成大事必备9种能力 9种手段 9种心态(图)

成大事必备9种能力 1、摆正心态&#xff0c;敢于面对现实 对于那些不停地抱怨现实恶劣的人来说&#xff0c;不能称心如意的现实&#xff0c;就如同生活的牢笼&#xff0c;既束缚手脚&#xff0c;又束缚身心&#xff0c;因此常屈从于现实的压力&#xff0c;成为懦弱者;而那些…

解决:A component required a bean of type ‘javax.jms.Queue‘ that could not be found.

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 情景描述&#xff1a;只是想简单写个 ActiveMQ 的小样&#xff0c;启动服务却报错&#xff1a; Error starting ApplicationContext…

【计算机视觉】OpenCV篇(3) - 图像几何变换(仿射变换/透视变换)

图像的几何变换从原理上看主要包括两种&#xff1a;基于23矩阵的仿射变换&#xff08;平移、缩放、旋转和翻转等&#xff09;、基于33矩阵的透视变换。 仿射变换基本的图像变换就是二维坐标的变换&#xff1a;从一种二维坐标(x,y)到另一种二维坐标(u,v)的线性变换&#xff1a; …

Linux学习第五篇之文件处理命令touch、cat、tac、more、less、head、tail

一、touch命令&#xff1a; 命令名称&#xff1a;touch 命令所在路径&#xff1a;/bin/touch 执行权限&#xff1a;所有用户 语法&#xff1a;touch [文件名] 功能描述&#xff1a;创建空文件 例子&#xff1a; touch leanring.file 说明&#xff1a;在当前目录下创建空文件l…