(优秀文章保存)Quartz优秀文章保存

Quartz的基本使用之入门(2.3.0版本)

一、Quartz可以用来做什么

Quartz是一个强大任务调度框架,我工作时候会在这些情况下使用到quartz框架,当然还有很多的应用场景,在这里只列举2个实际用到的

  • 餐厅系统会在每周四晚上的22点自动审核并生成报表
  • 人事系统会在每天早晨8点给有待办的人员自动发送Email提醒

二、使用Quartz之前的准备

1.建立一个Maven项目

2.引入quartz的依赖  

  使用quartz,我们仅仅需要在maven的pom文件中添加依赖即可。我使用的是现在最新的一个版本2.3.0,大家可以在maven的仓库获取到最新的版本依赖,地址:http://mvnrepository.com/artifact/org.quartz-scheduler/quartz

   但然也可以使用这个2.3.0的依赖,下面的例子都是使用此依赖并实现了效果。

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version>
</dependency>

三、编写第一个Quartz任务案例 - 每隔2秒钟打印一次HelloQuartz

先实现一下这个基本的Quartz的任务再来介绍一下Quartz的3个重要组成,JobDetail,Trigger,Scheduler

1.创建一个类 HelloJob.java,这个类是编写我们的具体要实现任务(打印Hello Quartz)

复制代码

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloJob implements Job{public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {//打印当前的执行时间 例如 2017-11-23 00:00:00Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("现在的时间是:"+ sf.format(date));//具体的业务逻辑System.out.println("Hello Quartz");}
}

复制代码

2.创建一个类HelloScheduler.java,这个是具体触发我们的任务

复制代码

public class HelloScheduler {public static void main(String[] args) throws SchedulerException {//创建一个jobDetail的实例,将该实例与HelloJob Class绑定JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob").build();//创建一个Trigger触发器的实例,定义该job立即执行,并且每2秒执行一次,一直执行SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例StdSchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();scheduler.start();scheduler.scheduleJob(jobDetail,trigger);}
}

复制代码

3.执行main方法,Run 'HelloScheduler.main()',可以看见如下效果,表明任务执行成功了

4.一句话看懂quartz

   1、创建调度工厂();      //工厂模式

   2、根据工厂取得调度器实例();    //工厂模式

   3、Builder模式构建子组件<Job,Trigger>    // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder

   4、通过调度器组装子组件   调度器.组装<子组件1,子组件2...>    //工厂模式

   5、调度器.start();   //工厂模式

 

 四、第二个案例 -  每日的9点40分触发任务打印HelloQuartz

 与上一个的简单案例的区别在于,SimpleTrigger/CronTrigger. 简单的定时任务,可以采用SimpleTrigger,复杂的任务一般采用CronTrigger.cronTrigger不仅可以设定单的触发时间表,更可以设定非常复杂的触发时间表。 CronTrigger 是基于 Unix类似于 cron 表达式,如果对cron表达式比较熟悉,那么学习起来经非常简单. 即使对cron表达式不熟悉,花一会儿的功夫也可以学会。(在工作中我们直接使用网上的在线生成表达式即可又快又准确)生成地址:http://cron.qqe2.com/

先上代码,然后介绍一下cron表达式生成规则。

1.编写任务类 HelloJob.java,具体情况编写具体内容,如生成报表,发送邮件。。

复制代码

public class HelloJob implements Job{public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {//打印当前的执行时间 例如 2017-11-22 00:00:00Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("现在的时间是:"+ sf.format(date));//具体的业务逻辑System.out.println("开始生成任务报表 或 开始发送邮件");}
}

复制代码

 2.编写任务触发类  CronScheduler.java

复制代码

public class CronScheduler {public static void main(String[] args) throws SchedulerException, InterruptedException {//jobDetailJobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("cronJob").build();//cronTrigger//每日的9点40触发任务CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("cronTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 40 9 * * ? ")).build();//1.每日10点15分触发      0 15 10 ?* *//2.每天下午的2点到2点59分(正点开始,隔5分触发)       0 0/5 14 * * ?//3.从周一到周五每天的上午10点15触发      0 15 10 ? MON-FRI//4.每月的第三周的星期五上午10点15触发     0 15 10 ? * 6#3//5.2016到2017年每月最后一周的星期五的10点15分触发   0 15 10 ? * 6L 2016-2017//Scheduler实例StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();Scheduler scheduler = stdSchedulerFactory.getScheduler();scheduler.start();scheduler.scheduleJob(jobDetail,cronTrigger);}
}

复制代码

 

quartz定时任务时间设置

每天凌晨2点  0 0 2 * * ?和每天隔一小时 0 * */1 * * ?

例1:每隔5秒执行一次:*/5 * * * * ?

例2:每隔5分执行一次:0 */5 * * * ?
在26分、29分、33分执行一次:0 26,29,33 * * * ?

例3:每天半夜12点30分执行一次:0 30 0 * * ? (注意日期域为0不是24)
每天凌晨1点执行一次:0 0 1 * * ?

每天上午10:15执行一次: 0 15 10 ? * * 或 0 15 10 * * ? 或 0 15 10 * * ? *

每天中午十二点执行一次:0 0 12 * * ?

每天14点到14:59分,每1分钟执行一次:0 * 14 * * ?

每天14点到14:05分,每1分钟执行一次:0 0-5 14 * * ?

每天14点到14:55分,每5分钟执行一次:0 0/5 14 * * ?

每天14点到14:55分,和18点到18点55分,每5分钟执行一次:0 0/5 14,18 * * ?

每天18点执行一次:0 0 18 * * ?

每天18点、22点执行一次:0 0 18,22 * * ?

每天7点到23点,每整点执行一次:0 0 7-23 * * ?

每个整点执行一次:0 0 0/1 * * ?

转载地址:

https://www.cnblogs.com/zhanghaoliang/p/7886110.html

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

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

相关文章

cross-entropy函数

我们理想情况是让神经网络学习更快假设简单模型: 只有一个输入,一个神经元,一个输出简单模型: 输入为1时, 输出为0初始 w 0.6, b 0.9 初始预测的输出 a 0.82, 需要学习学习率: 0.15演示: 初始: w 2.0, b 2.0, 初始预测输出: 0.98, 和理想输出0差点很远演示:神经网络的学…

MyBatis之快速入门

MyBatis之快速入门 2017/9/30首先我要明确告诉大家的是MyBatis是一个java持久层框架&#xff0c;以前我们都是用jdbc来将我们的java程序与数据库相连接&#xff0c;而MyBatis是对jdbc的一个封装。 1.MyBatis框架的引入 我们来看看传统的编程方式中使用jdbc的问题: 1.数据库连接…

【使用注意】特殊中括号[]的特殊json数组

Testpublic void demo93() throws Exception {String str "[\"a\", \"b\", \"c\"]";//生成json数组JSONArray createArray new JSONArray();createArray.put("a");createArray.put("b");createArray.put("…

MyBatis之Mapper动态代理开发

MyBatis之Mapper动态代理开发 2017/9/301.SqlSession的使用范围 1.SqlSessionFactoryBuilder SqlSessionFactoryBuilder是以工具类的方式来使用:需要创建sqlSessionFactory时就new一个 SqlSessionFactoryBuilder 2.sqlSessionFactory 正常开发时&#xff0c;以单例方式管理sqlS…

MyBatis之输入(parameterType)与输出(resultType、resultMap)映射

MyBatis之输入(parameterType)与输出(resultType、resultMap)映射 2017/9/30在MyBatis中&#xff0c;我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中&#xff0c;值的类型与dao层响应方法的参数类型一致)&#xff0c;通过resultType完成输出映射(从数据库中…

MyBatis之优化MyBatis配置文件中的配置

MyBatis之优化MyBatis配置文件中的配置 2017/9/30MyBatis配置文件很重要&#xff0c;首先我们来看看MyBatis配置文件中的内容和顺序: 文件目录结构如下: 1.<properties>属性定义 可以把一些通用的属性值配置在属性文件中&#xff0c;加载到mybatis运行环境内。例如创建d…

【转载保存】在python中如何用word2vec来计算句子的相似度

在python中&#xff0c;如何使用word2vec来计算句子的相似度呢&#xff1f; 第一种解决方法 如果使用word2vec&#xff0c;需要计算每个句子/文档中所有单词的平均向量&#xff0c;并使用向量之间的余弦相似度来计算句子相似度&#xff0c;代码示例如下&#xff1a; import …

Spark介绍

Spark Spark 是什么? Apache Spark?是用于大规模数据处理的快速和通用引擎. 速度:在内存中,运行程序比Hadoop MapReduce快100倍&#xff0c;在磁盘上则要快10倍. Apache Spark具有支持非循环数据流和内存计算的高级DAG执行引擎. 易用:可以使用Java&#xff0c;Scala&#…

MyBatis之使用resultMap实现高级映射

MyBatis之使用resultMap实现高级映射 2017/09/30对于数据库中对表的增删改查操作&#xff0c;我们知道增删改都涉及的是单表&#xff0c;而只有查询操作既可以设计到单表操作又可以涉及到多表操作&#xff0c;所以对于输入映射parameterType而言是没有所谓的高级映射的&#xf…

MyBatis之查询缓存

MyBatis之查询缓存 2017/09/30正如大多数持久层框架一样&#xff0c;MyBatis同样也提供了对查询数据的缓存支持。今后我们要学习的SpringMVC框架属于系统控制层&#xff0c;它也有它的缓存区域&#xff0c;对响应的jsp页面进行缓存&#xff1b;Spring属于系统业务层&#xff0c…

MyBatis3.x和Spring3.x的整合

MyBatis3.x和Spring3.x的整合 2017/10/021.mybatis和spring整合的思路 1.让spring管理SqlSessionFactory 2.让spring管理mapper对象和dao 使用spring和mybatis整合开发mapper代理及原始dao接口。 自动开启事务&#xff0c;自动管理sqlsession 3.让spring管理数据源(即数据库连接…

特征选择

特征选择是特征工程中的重要问题&#xff08;另一个重要的问题是特征提取&#xff09;&#xff0c;坊间常说&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。由此可见&#xff0c;特征工程尤其是特征选择在机器学习中占有相当重要的…

交叉验证

sklearn中的交叉验证&#xff08;Cross-Validation&#xff09; sklearn是利用python进行机器学习中一个非常全面和好用的第三方库&#xff0c;用过的都说好。今天主要记录一下sklearn中关于交叉验证的各种用法&#xff0c;主要是对sklearn官方文档 Cross-validation: evaluati…

机器学习名词解释

1. 损失函数 损失函数是用来估量你模型的预测值f(x)与真实值Y的不一致程度&#xff0c;它是一个非负实值函数,通常使用L(Y, f(x))来表示&#xff0c;损失函数越小&#xff0c;模型的鲁棒性就越好。损失函数是经验风险函数的核心部分&#xff0c;也是结构风险函数重要组成部分。…

【转载保存】推荐ApacheCN开源的一个机器学习路线图

转载&#xff1a;https://mp.weixin.qq.com/s/EMWFFPsaKaGc8FO1g-htzg 推荐ApacheCN开源的一个机器学习路线图 原创&#xff1a; 机器学习初学者 机器学习初学者 今天 推荐一个ApacheCN开源的一个机器学习路线图&#xff1a; https://github.com/apachecn/AiLearning 注意…

CNN(Convolutional Neural Network) 的基础

卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;是一种前馈神经网络&#xff0c;人工神经元可以响应周围单元&#xff0c;可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受到生物思考方式启发的ML…

语音识别学习日志 2019-7-14 语音识别基础知识准备2 {EM算法与混合高斯模型(Gaussian mixture model, GMM)}

https://blog.csdn.net/lin_limin/article/details/81048411会对GMM和EM做详细介绍 本文参考&#xff1a; http://www.ituring.com.cn/article/497545(GMM模型) https://blog.csdn.net/xmu_jupiter/article/details/50889023(GMM模型) http://www.cnblogs.com/wjy-lulu/p/7…

【爬虫】爬取带有cookie才能获取网页内容的新闻网站

工作任务&#xff1a; 今天老大让我跑取一个新闻网站&#xff1a;https://www.yidaiyilu.gov.cn/ 采坑记录&#xff1a; https协议&#xff0c;如果利用http协议去请求会报出如下信息&#xff1a; 错误&#xff1a;SSLHandshake错误就知道了&#xff0c;客户端与服务端进行连…

语音识别学习日志 2019-7-14 语音识别基础知识准备3 {Kmean算法分析与HMM(Hidden Markov Model)模型}

Kmean算法 聚类算法 对于"监督学习"(supervised learning)&#xff0c;其训练样本是带有标记信息的&#xff0c;并且监督学习的目的是&#xff1a;对带有标记的数据集进行模型学习&#xff0c;从而便于对新的样本进行分类。而在“无监督学习”(unsupervised learni…

语音识别学习日志 2019-7-15 语音识别基础知识准备4 {Baun-Welch算法}

HMM 前向算法(Forward Algorithm)详细解释参考: http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3…