搜档网
当前位置:搜档网 › Java Quartz 自动调度

Java Quartz 自动调度

Java Quartz 自动调度
Java Quartz 自动调度

Java Quartz 自动调度

[java]

package com.test;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class CallGirl implements Job {

public void execute(JobExecutionContext context)

throws JobExecutionException {

System.out.println("正在打电话给女友...");

System.out.println("getTrigger().getName():"

+ context.getTrigger().getName());

}

}

[java]

package com.test;

import java.text.ParseException;

import java.util.Date;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.SimpleTrigger;

import org.quartz.impl.StdSchedulerFactory;

public class QuartzMainer {

public static void main(String[] args) throws SchedulerException,

ParseException {

Scheduler handsomeMan = new StdSchedulerFactory().getScheduler();

// CallGirl.class 回调类

JobDetail concerneGirl = new JobDetail("任务的名称", "group1",

CallGirl.class);

JobDetail tt = new JobDetail("任务的名称1", "group2", CallGirl.class);

// 10 重复次数,2000L 周期

SimpleTrigger momentTrigger = new SimpleTrigger("trigger1", "group1", new Date(), null, 10, 1000L);

CronTrigger t = new CronTrigger("trigger2", "group2",

"0 24 13 * * ? * ");

// way 2

// 若时间到,即使重复100000000次也没有用

long startTime = System.currentTimeMillis();

SimpleTrigger momentTrigger2 = new SimpleTrigger("trigger2", "group1"); momentTrigger2.setStartTime(new Date(startTime));

momentTrigger2.setEndTime(new Date(startTime + 6000L)); momentTrigger2.setRepeatCount(10);

momentTrigger2.setRepeatInterval(1000L);

// 帅哥通过时刻Trigger来调度关心女友这个job

handsomeMan.scheduleJob(concerneGirl, momentTrigger); handsomeMan.scheduleJob(tt, t);

// 开始

handsomeMan.start();

}

}

CronTrigger配置格式:

格式: [秒] [分] [小时] [日] [月] [周] [年]

序号说明是否必填允许填写的值允许的通配符

1 秒是0-59 , - * /

2 分是0-59 , - * /

3 小时是0-23 , - * /

4 日是1-31 , - * ? / L W

5 月是1-12 or JAN-DEC , - * /

6 周是1-

7 or SUN-SAT , - * ? / L #

7 年否empty 或1970-2099 , - * /

通配符说明:

* 表示所有值. 例如:在分的字段上设置"*",表示每一分钟都会触发。

? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为0 0 0 10 * ?

- 表示区间。例如在小时上设置"10-12",表示10,11,12点都会触发。

, 表示指定多个值,例如在周字段上设置"MON,WED,FRI" 表示周一,周三和周五触发

/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。

L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五"

W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为"1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-").

小提示

'L'和'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资)

# 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) 小提示

周字段的设置,若使用英文字母是不区分大小写的MON 与mon相同.

常用示例:

0 0 12 * * ? 每天12点触发

0 15 10 ? * * 每天10点15分触发

0 15 10 * * ? 每天10点15分触发

0 15 10 * * ? * 每天10点15分触发

0 15 10 * * ? 2005 2005年每天10点15分触发

0 * 14 * * ? 每天下午的2点到2点59分每分触发

0 0/5 14 * * ? 每天下午的2点到2点59分(整点开始,每隔5分触发)

0 0/5 14,18 * * ? 每天下午的2点到2点59分(整点开始,每隔5分触发)

每天下午的18点到18点59分(整点开始,每隔5分触发)

0 0-5 14 * * ? 每天下午的2点到2点05分每分触发

0 10,44 14 ? 3 WED 3月分每周三下午的2点10分和2点44分触发

0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发

0 15 10 15 * ? 每月15号上午10点15分触发

0 15 10 L * ? 每月最后一天的10点15分触发

0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发

0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发0 15 10 ? * 6#3 每月的第三周的星期五开始触发

0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次

0 11 11 11 11 ? 每年的11月11号11点11分触发(光棍节)

Java程序设计在线作业-单选题2

Java程序设计在线作业2 一、单选题(共 10 道试题,共 30 分。) 1. 下列程序的输出结果是import java.io.*; public class abc { public static void main(String args[]) { String s1="Hello!"; String s2=new String("World!"); System.out.println(s1.concat(s2)); } } A. false B. Hello! C. Hello!Wofld! D. 12 2. 在浏览器中执行applet 程序,以下选项中的哪个方法将被最先执行()。 A. init() B. start() C. destroy() D. stop() 3. Java语言的类型是() A. 面向对象语言 B. 面向过程语言 C. 汇编程序 D. 形式语言 4. 下列哪一项不属于Awt布局管理器?() A. GridLayout B. CardLayout C. BorderLayout D. BoxLayout

5. 下面代码的执行结果是什么?( )<% x=3; %><% int x=5; %><%! int x=7; %> x = <%=x%>, <%=this.x%> A. x = 3, 5 B. x = 3, 7 C. x = 5, 3 D. x = 5, 7 6. Java Applet 源程序文件的扩展名为()。 A. .java B. .class C. .html D. .exe 7. 在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的()方法来完成一些画 图操作。() A. start() B. stop() C. init() D. paint() 8. 阅读下面的代码,第10行的语句将调用哪个方法?() 1. class Person { 2. public void printValue(int i, int j) {/*…*/ } 3. public void printV alue(int i){/*...*/ } 4. } 5. public class Teacher extends Person { 6. public void printValue() {/*...*/ } 7. public void printValue(int i) {/*...*/} 8. public static void main(String args[]){ 9. Person t = new Teacher(); 10. t.printValue(10); 11. } 12. } A. 行2 B. 行3 C. 行6

quartz定时任务时间设置

quartz定时任务时间设置 这些星号由左到右按顺序代表:* * * * * * * 格式:[秒] [分] [小时] [日] [月] [周] [年] 序号说明 是否必填允许填写的值允许的通配符 1 秒是0-59 , - * / 2 分是0-59 , - * / 3 小时是0-23 , - * / 4 日是1-31 , - * ? / L W 5 月是1-12 or JAN-DEC , - * / 6 周是1- 7 or SUN-SAT , - * ? / L # 7 年否empty 或1970-2099 , - * / 通配符说明: * 表示所有值. 例如:在分的字段上设置"*",表示每一分钟都会触发。 ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为0 0 0 10 * ? - 表示区间。例如在小时上设置"10-12",表示10,11,12点都会触发。 , 表示指定多个值,例如在周字段上设置"MON,WED,FRI" 表示周一,周三和周五触发 / 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。 L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五" W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为"1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-"). 小提示 'L'和'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资) # 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) 小提示 周字段的设置,若使用英文字母是不区分大小写的MON 与mon相同. 常用示例: 0 0 12 * * ? 每天12点触发 0 15 10 ? * * 每天10点15分触发 0 15 10 * * ? 每天10点15分触发 0 15 10 * * ? * 每天10点15分触发 0 15 10 * * ? 2005 2005年每天10点15分触发 0 * 14 * * ? 每天下午的2点到2点59分每分触发

详细讲解Quartz如何从入门到精通

详细讲解Quartz如何从入门到精通(1) Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE 和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。 本文内容 1、Quartz让任务调度简单 2、Quartz的发展史 3、上手Quartz 4、Quartz内部架构 5、作业 6、作业管理和存储 7、有效作业存储 8、作业和触发器 9、调度一个作业 10、用调度器(Scheduler)调用你的作业 11、编程调度同声明性调度 12、有状态和无状态作业 13、Quartz框架的其他特征 14、Quartz下一步计划 15、了解更多Quartz特征 你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用 Java编

程吗?如果这些问题中任何一个你回答是,那么你应该使用Quartz调度器。 旁注:Matrix目前就大量使用到了Quartz。比如,排名统计功能的实现,在Jmatrix 里通过Quartz定义了一个定时调度作业,在每天凌晨一点,作业开始工作,重新统计大家的Karma和排名等。 还有,RSS文件的生成,也是通过Quartz定义作业,每隔半个小时生成一次RSS XML 文件。 所以Quartz使用的地方很多,本文无疑是一篇很好的入门和进阶的文章,在此,感谢David w Johnson的努力! Quartz让作业调度简单 在你的Job接口实现类里面,添加一些逻辑到execute()方法。一旦你配置好Job 实现类并设定好调度时间表,Quartz将密切注意剩余时间。当调度程序确定该是通知你的作业的时候,Quartz框架将调用你Job实现类(作业类)上的 execute()方法并允许做它该做的事情。无需报告任何东西给调度器或调用任何特定的东西。仅仅执行任务和结束任务即可。如果配置你的作业在随后再次被调用,Quartz框架将在恰当的时间再次调用它。 如果你使用了其它流行的开源框架象struts,你会对Quartz的设计和部件感到舒适。虽然两个开源工程是解决完全不同的问题,还是有很多相似的之处,就是开源软件用户每天感觉很舒适。Quartz能用在单机J2SE应用中,作为一个RMI服务器,也可以用在web应用中,甚至也可以用在J2EE应用服务器中。 Quartz的发展史 尽管Quartz今年开始受到人们注意,但还是暂时流行。Quartz由James House 创建并最初于2001年春天被加入sourceforge工程。接下来的几年里,有许多新特征和版本出现,但是直到项目迁移到新的站点并成为 OpenSymphony项目家族的一员,才开始真正启动并受到应有的关注。 James House仍然和几个协助他的业余开发者参与大量开发工作。Quartz开发团队今年能发布几个新版本,包括当前正处在候选发布阶段的1.5版。 上手Quartz Quartz工程驻留在OpenSymphony站点上。在Quartz站点上可以找到许多有用的资源:JavaDocs,包含指南的文档,CVS访问,用户和开发者论坛的连接,当然也有下载。 从下载连接取得Quartz的发布版本,并且解压到到本地目录。这个下载文件包含了一个预先构建好的Quartz二进制文件(quartz.jar),你可以将它放进自己的应

《java程序设计》作业答案

《JA V A程序设计》作业答案 一、选择题 1、编译HelloWorld.java的正确命令是: C) javac HelloWorld.java 2、正确运行HelloWorld.java的正确命令是: A)java HelloWorld 3、下面程序代码,使用多行注释正确的是: C)/* int k=9; int j=8; k = k + j; */ 4、long型的取值范围是: D)-263~263-1 5、下面不属于Java保留字的是: C)malloc 6、下面属于非法的Java标识符的是: D) abc-d 7、对与System.out.println()语句解释合理的是: C)执行后输出一个空行 8、阅读下面的代码,回答问题, for( m = 0 ; m > -2 ; m -- ){….} For循环执行多少次: C)2 9、阅读下面的代码,回答问题, for( m = 0; m < 5; m++ ) { System.out.print( m + "," ); if( m == 3 ) break; } 执行结果是: C)0,1,2,3, 10、阅读下面的代码,回答问题, public class Ex { int x = 1; void m() { int x = 3; System.out.print( "x= " + x); } public static void main( String[] args ) { Ex ex = new Ex();

ex.m(); } } 执行结果是: B)x=3 11、下面语句在编译时不会出现错误信息的是: a) float f = 1.3; b) char c = "a"; c) byte b = 257; d) boolean b = null; e) int i = 10; 12、编译和运行下面的代码,会有什么结果产生: public class MyClass { public static void main(String arguments[]) { amethod(arguments); } public void amethod(String[] arguments) { System.out.println(arguments); System.out.println(arguments[1]); } } a) 错误,静态方法不能直接引用非静态方法b) 错误,主方法有错误 c) 错误,数据定义有错误d) 方法amethod必须被声明为String型 13、编译期间会出错的是: a) import java.awt.*; package Mypackage; class Myclass {} b) package MyPackage; import java.awt.*; class MyClass{} c) /*This is a comment */ package MyPackage; import java.awt.*; class MyClass{} 14、byte型的变量的表示范围为: a) -128 to 127 b) (-2 power 8 )-1 to 2 power 8 c) -255 to 256 d) 依赖Java虚拟机而定 15、在命令行运行命令:java myprog good morning 会有什么结果显示出来: public class myprog{ public static void main(String argv[]) { System.out.println(argv[2]) } } a) myprog b) good c) morning

Spring提供的三种定时任务机制及其比较

Spring提供的三种定时任务机制及其比较 定时任务的需求在众多应用系统中广泛存在,在Spring中,我们可以使用三种不同的定时机制,下面一一描述并加以比较 1. 基于Quartz的定时机制

下面详细解释这个类图中涉及的关键类及其使用场景 1.1. SchedulerFactoryBean 这是Spring中基于Quartz的定时机制入口,只要Spring容器装载了这个类,Quartz定时机制就会启动,并加载定义在这个类中的所有trigger Spring配置范例: [xhtml]view plaincopy 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 1.2. CronTriggerBean 实现了Trigger接口,基于Cron表达式的触发器 这种触发器的好处是表达式与linux下的crontab一致,能够满足非常复杂的定时需求,也容易配置

Spring配置范例: [xhtml]view plaincopy 1. 2. 3. 4. 1.3. SimpleTriggerBean 该类也实现了Trigger接口,基于配置的定时调度 这个触发器的优点在于很容易配置一个简单的定时调度策略 Spring配置范例: [xhtml]view plaincopy 1. 2. 3. 4. 5. 6.3600000 7. 8. 9.86400000 10. 11.

Quartz+spring定时器实例用

Spring+Quartz定时器例子如下: 1. javabean类 在Test.QuartzJob中 1.package Test; 2. 3.public class QuartzJob { 4.public void work() 5. { 6. System.out.println("Quartz的任务调度!!!"); 7. } 8. } 1. 2. 7. 8. 9. 10. 11. 13. 14. 15. 16. 17. 18. 19.work 20. 21. 22. 23. 25. 26.

Java程序设计课程作业

Java程序设计课程作业 第一章绪论 1、安装Java SDK到你的电脑中。 2、选择安装一种Java开发工具到你的电脑中。Jcreater、NetBeans、Eclipse 3、编译并运行一个“Hello World”Java程序。 程序代码: // public class App2_1 { public static void main(String[]args) { System.out.println("hello Word"); } } 4、编译并运行一个Java Applet程序。 答:编译成功,不过浏览器不显示自己的Applet程序,还在学习中,错误的原因是自己电脑上java的安全设置的原因,修改后运行成功。 第二章Java语法基础 1、下列表达式是否有错?若有错,请说明何处出现何种错误;若无错,请给出其值。 (1) 3+4<<2^-8 没有错误,运行结果为-28 (2) 36>>2*4&48<<8/4+2 运行结果为0

有错误,||这个运算规律是两边均为boolean型 (4) 2*4&&0<2||4%2 有错误,||这个运算规律是两边均为boolean型 2、任意准备一份学生成绩表,其中包括至少3门课程、每门课程至少10名同学的成绩。请编写程序完成以下功能:(1) 统计并输出各门课程的平均成绩。(2) 输出等级表:优、良、中、及格及不及格。 import java.util.*; class student{ String num; doublemath; doubleenglish; doublechinese; } publicclass Test{ publicstaticvoid main(String[]agrs){ student stu[]=new student[11]; for(int i=0;i<10;i++) stu[i]=new student(); Scanner reader=new Scanner(System.in); System.out.println("请依次输入十个同学的数学,英语。语文的成绩:"); for(int i=0;i<=10;i++){ System.out.println("第"+(i+1)+"同学的数学,英语。语文的成绩:"); stu[i].math=reader.nextInt(); stu[i].english=reader.nextInt(); stu[i].chinese=reader.nextInt(); } double sum=0; for(int i=0;i<10;i++) sum=sum+stu[i].math; float A=(float)sum/10; System.out.println("数学平均成绩:"+A); //int sum;

Quartz任务调度说明 CronTrigger + Spring

触发器中两个重要的触发器 1,SimpleTrigger :可以精确到毫秒,如果需要让任务只在某个时刻执行一次,或者,在某个时刻开始,然后按照某个时间间隔重复执行 例如: public SimpleTrigger(String name, //名称 String group, //组名 Date startTime, //开始时间 Date endTime, //结束时间(控制权高于重复次数属性)为null 时直到永远 int repeatCount, //重复次数(可能是0) long repeatInterval) //重复间隔(以毫秒为单位) 2,CronTrigger :像日历那样按日程来触发任务。可以指定诸如“每个周五中午”,或者“每个工作日的9:30”或者“从每个周一、周三、周五的上午9:00到上午10:00之间每隔五分钟”这样日程安排来触发。 也可以像SimpleTrigger一样,CronTrigger也有一个startTime以指定日程从什么时候开始,也有一个(可选的)endTime以指定何时日程不再继续. Cron表达式被用来配置CronTrigger实例.Cron表达式是一个由7个子表达式组成的字符串。每个子表达式都描述了一个单独的日程细节。这些子表达式用空格分隔,分别表示:秒分钟小时月中的天天周中的天年 秒---例如:3/5从第3秒开始每隔5秒触发一次 通配符('*')可以被用来表示域中“每个”可能的值 '?'字符可以用在day-of-month及day-of-week域中,它用来表示“没有指定值”。 'L'字符可以在day-of-month及day-of-week中使用,L是last的缩写。如时在day-of-month 中L表示的月的最后一天。在day-of-week中,表示"当月的最后的周XXX",例如:"6L" 或者"FRIL"都表示本月的最后一个周五。 '#'表示表示月中的第几个周几。例如:day-of-week 域中的"6#3" 或者"FRI#3" 表示“月中第三个周五”。 注意:对于单独触发器来说,有些日程需求可能过于复杂而不能用表达式表述,例如:9:00到10:00之间每隔5分钟触发一次,下午1:00到10点每隔20分钟触发一次。 这个解决方案就是创建两个触发器,两个触发器都运行相同的任务。 CronTrigger 例1 –一个简单的每隔5分钟触发一次的表达式 "0 0/5 * * * ?" CronTrigger 例2 –在每分钟的10秒后每隔5分钟触发一次的表达式(例如. 10:00:10 am, 10:05:10等.)。 "10 0/5 * * * ?" CronTrigger 例3 –在每个周三和周五的10:30,11:30,12:30触发的表达式。 "0 30 10-13 ? * WED,FRI" CronTrigger 例4 –在每个月的5号,20号的8点和10点之间每隔半个小时触发一次且不包括10点,只是8:30,9:00和9:30的表达式。

Java程序设计大作业实验报告

目录 一、前言 (2) 二、需求分析 (3) 三、系统总体设计 (3) 3.1系统总体设计系统思路 (3) 3.2数据库设计 (4) 3.2.1 login1表的设计和数据 (4) 3.2.2 student表的设计和数据 (5) 3.2.3 course表的设计和数据 (5) 3.2.4 score表的设计和数据 (5) 3.3系统功能模块设计 (6) 四、系统详细设计 (7) 4.1登录模块 (7) 4.2 学生模块 (7) 4.3 教师模块 (7) 4.4 管理员模块 (8) 五、系统测试及运行结果 (9) 5.1 主界面 (9) 5.2 学生管理中心界面 (9) 5.3 教师管理中心界面 (10) 5.4 管理员管理中心界面 (10)

5.5 查询课表界面 (11) 5.6 查询成绩界面 (11) 5.7 查询教学情况界面 (11) 5.8 查询所有学生成绩界面 (12) 5.9 学生信息管理界面 (12) 5.10 学生成绩管理界面 (13) 5.11 用户管理界面 (13) 六、实验总结 (14) 七、参考文献 (14) 一、前言 随着计算机在人们生活中的普及和网络时代的来临,对信息的要求日益增加,学生信息管理业务受到了较为强烈的冲击,传统的手工管理方式传统的手工管理方式已不能适应现在的信息化社会。如何利用现有的先进计算机技术来解决学生信息管理成为当下的一个重要问题,学生信息管理系统是典型的信息管理系统,其开发主要就是针对前台的页面展示以及后台数据的管理。对于前者,要求应用程序功

能完备,易于使用,界面简单;而对于后者,则要求数据库具有一致性、完整性,并能够依据前台的操作来对应操作后台数据库达到一定的安全性。 本学生信息管理系统主要采用的纯JAVA代码实现图形界面系统的开发,以及数据库知识进行数据的查询,删除,插入和更新。本系统主要分为三个部分:学生模块、教师模块、管理员模块。其中学生模块实现的功能:查询课表信息和查询成绩。教师模块实现的功能:查询课表信息、查询教学情况和查询所有学生的各科成绩。管理员模块实现的功能:课表信息的管理、学生信息管理、学生成绩管理和用户信息管理。 二、需求分析 用JAVA语言实现学生信息管理系统的图形界面的编程。主要实现以下几个重要功能: ①实现三种不同身份(学生、教师、管理员)登录学生信息管理系统。(其中的数据信息保存在数据库中)

【SpringBoot】廿五、SpringBoot中使用Quartz管理定时任务

【SpringBoot】廿五、SpringBoot中使用Quartz管理定 时任务 2020-07-21 15:55:47 定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任务的时候,就需要去改动代码,还得启停服务器,这是非常不友好的事情 直至遇见 Quartz,利用图形界面可视化管理定时任务,使得我们对定时任务的管 理更加方便,快捷 一、Quartz 简介 Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和 J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个 作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。 二、开发前戏 1、引入 maven 依赖 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-quartz 这里引入了 web 的依赖,以及 Quartz 的依赖,其余依赖请根据需求自行引入

Quartz处理定时任务的核心概念

核心概念 1.Job:Job是任务执行的流程,是一个类 2.JobDetail:JobDetail是Job是实例,是一个对象,包含了该实例的执行计划和所需要的数据 3.Trigger:Trigger是定时器,决定任务何时执行 4.Scheduler:调度器,调度器接受一组JobDetail+Trigger即可安排一个任务,其中一个JobDetail可以关联多个Trigger 实例 1.初始化: 1 2 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); 当程序退出时,应该主动调用shutdown()方法关闭该调度器。 2.Job: 一个Job类需要实现org.quartz.Job接口,这个接口值需要实现一个方法即可:

1 void execute(JobExecutionContext context) throws JobExecutionException context是重要的上下文,可以访问到关联的JobDetail对象和本次触发的Trigger对象,以及在此之上设定的数据。 3.JobDetail: 可以使用JobBuilder来构建一个JobDetail对象: 1 2 3 4 5 6 7 JobDetail job = JobBuilder.newJob(MyJob.class) // MyJob是我实现的Job类 .withIdentity("myjob") // 可以给该JobDetail起一个id,便于之后的检索 .requestRecovery() // 执行中应用发生故障,需要重新执行 .storeDurably() // 即使没有Trigger关联时,也不需要删除该JobDetail .usingJobData("key1", "value1") .usingJobData("key2", "value2") // 以Key-Value形式关联数据 .build(); Quartz因为考虑到有些任务不是幂等的,不可以多次重复执行,所以默认没有开启“requestRecovery”。当确认业务中允许一次任务执行两次的情况下,可以开启该选项,则任务肯定不会因为应用停止而漏调用,但缺点就是,有可能会重复调用。 每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中,可以通过context取出该数据,进行业务流程处理。 4.Trigger:

java语言程序设计作业答案

Java语言程序设计(郑莉) 第二章习题答案 1.什么是对象、类,它们之间的联系? 答:1)对象是包含现实世界物体特征的抽象实体,它反映系统为之保存信息和与它交互的能力。对象是一些属性及服务的封装体,在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”来表示。现实生活中对象是指客观世界的实体;在程序中对象是指一组变量和相关方法的集合。 2)类是既有相同操作功能和相同的数据格式的对象的集合与抽象! 3)两者的关系:对象是类的具体实例.。 4.请解释类属性、实例属性及其区别。 答:实例属性,由一个个的实例用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同。 5.请解释类方法、实例属性及其区别。 答:实例方法表示特定对象的行为,在声明时前面不加static修饰符,在使用时需要发送给一个类实例。 类方法也称为静态方法,在方法声明时前面需加static修饰符,类方法表示具体实例中类对象的共有行为。 区别:实例方法可以直接访问实例变量,调用实例方法,实例方法可以直接访问类变量,调用类方法;类方法可以直接调用类变量和类方法,类方法不能直接调用实例变量和实例方法; 6.类的访问控制符有哪几种?具体含义及其区别。 答:类的访问控制符只有public(公共类)及无修饰符(默认类)两种。 区别:当使用public修饰符时表示所有其他的类都可以使用此类;当没有修饰符时,则只有与此类处于同一包中的其他类可以使用类。 7类成员的访问控制符有哪几种?他们对类成员分别有哪些访问限制的作用? 答: 类成员的访问控制符有public,private,protecte及无修饰符. public(公有的):用public修饰的成分表示公有的,也就是它可以被其他任何对象访问(前提是对累成员所在的类访问有访问权限). P rivate(保护的):类中限定为private的成员只能被这个类本身访问,在类外不可见。proteced(保护的)用该关键字修饰的成分是受保护的,只可以被同一类及其子类的实例对象访问。 无修饰符(默认的):public,private,protected这个三个限定符不是必须写的。如果不写,则表明是“friendly”,相应的成分可以被所在保重的各类访问。 8简述构造方法的特点? 答: 构造方法主要有以下特点: (1)构造方法的方法名与类名相同; (2)构造方法没有返回类型(修饰符void也不能有); (3)构造方法通常被声明为公有的(public);

Spring集成Quartz定时任务框架介绍和Cron表达式详解

在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等。 我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码。 使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成,下面介绍它们集成方法和Cron表达式的详细介绍。 一、增加所依赖的JAR包 1、增加Spring的Maven依赖 org.springframework spring-webmvc 3.0.5.RELEASE 2、增加Quartz的Maven依赖 org.quartz-scheduler quartz 1.8.4 二、增加定时业务逻辑类 publicclass ExpireJobTask { /** Logger */ privatestaticfinal Logger logger = LoggerFactory.getLogger(ExpireJobTask.class); /** * 业务逻辑处理 */ publicvoid doBiz() { // 执行业务逻辑 // ........

springquartz实现定时任务的配置方法

Spring+Quartz实现定时任务的配置方法 第一步:.导入相关的jar包 (1)spring.jar (2)quartz-1.6.0.jar (3)相关包 commons-collections-3.2.jar ; commons-logging-1.1.1.jar; log4j-1.2.16.jar 第二步:创建一个类来定义工作 定义Quartz工作的第一步是创建一个类来定义工作。要做到这一点,你需要从Spring 的QuartzJobBean中派生子类。 第三步:配置JobDetail

值得注意的是,在这里你并没有直接声明一个TopTenTask Bean,而是声明了一个JobDetailBean。这是使用Quartz时的一个特点。 JobDetailBean是Quartz的org.quartz.JobDetail的子类,它要求通过jobClass属性来设置一个Job对象。 使用Quartz的JobDetail中的另一个特别之处是TopTenTask的timeout属性是间接设置的。JobDetail的jobDataAsMap属性接受一个java.util.Map,其中包含了需要设置给jobClass的各种属性。 在这里,这个map包含了一个键值为timeout。当JobDetailBean实例化时,它会将5注入到EmailReportJob的timeout属性中。 第四步:配置Trigger 工作已经被定义好了,接下来你需要调度这个工作。 Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。 Spring提供了两个触发器,SimpleTriggerBean和CronTriggerBean。 SimpleTriggerBean与ScheduledTimerTask类似。你可以用它来指定一个工作应该以怎样的频度运行,以及(可选地)在第一次运行工作之前应该等待多久。 例如,要调度报表工作每24小时运行一次,第一次在1小时之后开始运行,可以按照以下方式进行声明: 3600000 86400000 属性jobDetail装配了将要被调度的工作,在这个例子中是topTenTask Bean。属性repeatInterval告诉触发器以怎样的频度运行这个工作(以毫秒作为单位)。这里,我们

Java程序设计作业

要求:一个院系一个年级的同学题目不能相同,所以选择题目时应避免做相同的题目,其它学院和年级的同学相对自由一点。从22 道题目中任选一道,按实验指导书模式那样完成即可,写好大作业报告,同时写上自己的姓名、学号、学院和年级 1、编写一个Java 应用程序,从键盘读取用户输入两个字符串,并重载3 个函数 分别实现这两个字符串的拼接、整数相加和浮点数相加。要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃。 2、有工人,农民,教师,科学家,服务生,其中,工人,农民,服务生只有基本工资. 教师除基本工资外,还有课酬(元/天),科学家除基本工资外,还有年终奖,请你写 出相关类,将各种类型的员工的全年工资打印出来; 3、创建一个复数类complex,对复数进行数学运算,复数具有如下格式:RealPart+ImaginaryPart*I 其中,I 为-1的平方根。 要求如下: (1)利用浮点变量表示此类的私有数据。提供两个构造方法,一个用于此类声明时对象的初始化;一个为带默认值得无参构造方法。 (2)提供两复数加、减、乘的运算方法。 (3)按格式(a,b)打印复数。其中a 为实部,b 为虚部。 4、(1)编写一个圆类Circle,该类拥有:①一个成员变量 Radius(私有,浮点型);// 存放圆的半径; ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) //创建Circle对象时将半径初始化为 r ③三个成员方法 double getArea( ) //获取圆的面积 double getPerimeter( ) //获取圆的周长 void show( ) //将圆的半径、周长、面积输出到屏幕 (2)编写一个圆柱体类Cylinder,它继承于上面的Circle 类。还拥有: ①一个成员变量 double hight(私有,浮点型);// 圆柱体的高; ②构造方法 Cylinder (double r, double h ) //创建Circle 对象时将半径 初始化为r ③成员方法 double getVolume( ) //获取圆柱体的体积 void showVolume( ) //将圆柱体的体积输出到屏幕 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。

Java程序设计作业答案

1、创建一个Java程序,输出自己的基本信息:名字、学号以及本学期所修课程名称。答: package com.study; public class Example{ public static void main(String[] args) { System.out.println("名字"+"朱朝龙"); System.out.println("学号"+"1234567"); System.out.println("修课程名称"+"Java程序设计"); } } 2、叙述标识符的定义。指出下列用户自定义的标识符中哪些是合法的,那些是非法的?为什么? 2、abc AbC _2xy x$y if$ Else do b(3) ‘def’ Chine_bb 3by AbsFloat 答: 标识符:是用户编程时使用的名字 1.标识符由字母、数字、下划线“_”、美元符号“$”组成,并且首字母 不能是数字。 2.不能把java关键字和作为标识符。 3.标识符没有长度限制。 4.标识符对大小写敏感。 合法标识符为:abc AbC _2xy x$y if$ Else Chine_bb AbsFloat 非法表示符为:do (关键字);b(3) ‘def’(包含非字母、数字、下划线“$”字符);3by(数字开头) 3、设有变量说明语句: int a = 15; boolean b,e; char c, d; float x = 9.2f, y, z; 求出下列表达式的值: (1) b = 5>4||x>25; 答:true (2) e = !(a > x); 答:false (3) c = ‘a’ + 5; 答:f (4)y = x + a % 3 + x/2;

相关主题