spring设置动态定时任务

spring设置动态定时任务
spring设置动态定时任务

Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)

2007-07-25 13:52

什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。

这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,发现

0/10 * * * * ?

中cronExpression是关键,如果可以动态设置cronExpression的值,也就说如果我们可以直接调用CronTriggerBean中设置cronExpression的方法,就可以顺利解决问题了。

熟悉1的朋友可以跳过不看,下面2、3是动态定时任务的具体实现。

1.Quartz在Spring中的简单配置

Spring配置文件:

0/10 * * * * ?

在上面的配置中设定了

①targetMethod: 指定需要定时执行scheduleInfoAction中的simpleJobTest()方法

②concurrent:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。

③cronExpression:0/10 * * * * ?表示每10秒执行一次,具体可参考附表。

④triggers:通过再添加其他的ref元素可在list中放置多个触发器。scheduleInfoAction中的simpleJobTest()方法

注意:此方法没有参数,如果scheduleInfoAction有两个方法simpleJobTest()和simpleJobTest(String argument),则spring只会去执行无参的simpleJobTest().

public void simpleJobTest() {

log.warn("uh oh, Job is scheduled !'" + "' Success...");

}

2.Quartz在Spring中动态设置cronTrigger方法一

Spring配置文件:

0/10 * * * * ?

scheduleInfoAction中的reScheduleJob ()方法及相关方法

①reScheduleJob读取数据库,获得自定义定时器调度时间():

private void reScheduleJob() throws SchedulerException, ParseException {

// 运行时可通过动态注入的scheduler得到trigger

CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(

"cronTrigger", Scheduler.DEFAULT_GROUP);

String dbCronExpression = getCronExpressionFromDB();

String originConExpression = trigger.getCronExpression();

// 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等

// 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob

if(!originConExpression.equalsIgnoreCase(dbCronExpression)){

trigger.setCronExpression(dbCronExpression);

scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger);

}

// 下面是具体的job内容,可自行设置

// executeJobDetail();

}

②getCronExpressionFromDB():从数据库中获得dbCronExpression的具体代码,由于使用了scheduleInfoManager,所以要在定义相应的setter方法

private String getCronExpressionFromDB(){

String sql="from ScheduleInfo scheduleInfo where 1=1 ";

sql=sql+" and https://www.360docs.net/doc/fe16459797.html,Id = '"+"1" + "'";

List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql);

ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0);

String dbCronExpression = scheduleInfo.getCronExpression();

return dbCronExpression;

}

③在spring配置文件的scheduleInfoAction配置了相应的property(scheduler/ scheduleInfoManager),要为其设置setter方法

private Scheduler scheduler;

// 设值注入,通过setter方法传入被调用者的实例scheduler

public void setScheduler(Scheduler scheduler) {

this.scheduler = scheduler;

}

private ScheduleInfoManager scheduleInfoManager;

// 设值注入,通过setter方法传入被调用者的实例scheduleInfoManager

public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){ this.scheduleInfoManager = scheduleInfoManager;

}

3.Quartz在Spring中动态设置cronTrigger方法二

在上面的2中我们可以看到,尽管已经可以动态进行rescheduleJob了,不过依然需要我们设置一个cronExpression,如果尝试一下拿掉spring配置中的

0/10 * * * * ?

则容器(如tomcat)启动时会报错。

实际中我们希望tomcat启动时就可以直接去读数据库,拿到相应的dbCronExpression,然后定时执行一个job,而不希望配置初始的cronExpression ,观察下面的CronTriggerBean,考虑到cronExpression需要初始化,如果设定一个类InitializingCronTrigger继承CronTriggerBean,然后在这个类中做一些读取DB的初始化工作(设置cronExpression),问题就可以解决了。

Spring配置文件:

InitializingCronTrigger中的相关方法

注意:在注入scheduleInfoManager属性的时候,我们可以去读取DB任务时间(之所以放在setter方法中,是因为需要在设置scheduleInfoManager后进行getCronExpressionFromDB(),否则,也可以①②逻辑把放在类的构造函数中).

注意InitializingCronTrigger必须extends CronTriggerBean.

public class InitializingCronTrigger extends CronTriggerBean implements Serializable { private ScheduleInfoManager scheduleInfoManager;

// 设值注入,通过setter方法传入被调用者的实例scheduleInfoManager

public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){ this.scheduleInfoManager = scheduleInfoManager;

// 因为在getCronExpressionFromDB使用到了scheduleInfoManager,所以

// 必须上一行代码设置scheduleInfoManager后进行getCronExpressionFromDB

String cronExpression = getCronExpressionFromDB (); // ①

// 因为extends CronTriggerBean ,此处调用父类方法初始化cronExpression

setCronExpression(cronExpression); // ②

}

private String getCronExpressionFromDB(){

String sql="from ScheduleInfo scheduleInfo where 1=1 ";

sql=sql+" and https://www.360docs.net/doc/fe16459797.html,Id = '"+"1" + "'";

List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql);

ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0);

String dbCronExpression = scheduleInfo.getCronExpression();

return dbCronExpression;

}

……

}

各个时间可用值如下:

秒0-59 , - * /

分0-59 , - * /

小时0-23 , - * /

日1-31 , - * ? / L W C

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

周几1-7 or SUN-SAT , - * ? / L C #

年(可选字段) empty, 1970-2099 , - * /

可用值详细分析如下:

“*”——字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。

“?”——字符可以用在“日”和“周几”字段. 它用来指定'不明确的值'. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。

“-”——字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点"。

“,”——字符指定数个值。比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday"。

“/”——字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和45秒"。而"5/15"则表示"第5, 20, 35, 和50". 在'/'前加"*"字符相当于指定从0秒开始. 每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于

“月”字段来说为1到12。"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。

“L”——字符可用在“日”和“周几”这两个字段。它是"last"的缩写, 但是在这两个字段中有不同的含义。例如,“日”字段中的"L"表示"一个月中的最后一天" ——对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中, 它简单的表示"7" or "SAT",但是如果在“周几”字段中使用时跟在某个数字之后, 它表示"该月最后一个星期×" ——比如"6L"表示"该月最后一个周五"。当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。

“W”——可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五) 。比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日, 触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W", 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。

“L”和“W”可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。

“#”——字符可用于“周几”字段。该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五( 6表示周五而"#3"该月第三个)。再比如: "2#1" = 表示该月第一个周一而"4#5" = 该月第五个周三。注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。

“C”——字符可用于“日”和“周几”字段,它是"calendar"的缩写。它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历, 那它等同于包含全部日历。“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。

对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。

附表:

"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期间的每1分钟触发

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发

"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发

"0 10,44 14 ? 3 WED" 每年三月的星期三的下午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" 每月的第三个星期五上午10:15触发

至于每个符号看看例子就好了.很简单了.

本文来自CSDN博客,转载请标明出处:https://www.360docs.net/doc/fe16459797.html,/bolink5/archive/2009/09/18/4565523.aspx

SpringBoot企业级开发教程教学大纲

《Spring Boot企业级开发教程》课程教学大纲 (课程英文名称) 课程编号: XXXX 学分:5学分 学时:60学时(其中:讲课学时:38 上机学时:22) 先修课程:Java基础案例教程、Java Web程序设计任务教程、 Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)适用专业:信息及其计算机相关专业 开课部门:计算机系 一、课程的性质与目标 《Spring Boot企业级开发教程》是面向计算机相关专业开设的一门专业的Java 应用开发课程,主要讲解了当前主流的Spring Boot框架以及与第三方技术整合开发实战内容。通过本课程的学习,学生能够理解并掌握Spring Boot 框架的基础知识,同时能够掌握Spring Boot与常用第三方技术的整合实现实际开发中的业务需求,包括实现Web开发、数据访问、缓存管理、安全管理、消息服务、任务管理等。 二、课程的主要内容及基本要求 第1章 Spring Boot开发入门(4学时) [知识点] ?Spring Boot概述 ?环境准备 ?使用Maven方式构建Spring Boot项目 ?使用Spring Initializr方式构建Spring Boot项目 ?单元测试 ?热部署 ?Spring Boot依赖管理

?Spring Boot自动配置 ?Spring Boot执行流程 [重点] ?使用Maven方式构建Spring Boot项目 ?使用Spring Initializr方式构建Spring Boot项目 ?单元测试 ?Spring Boot依赖管理 ?Spring Boot自动配置 ?Spring Boot执行流程 [难点] ?Spring Boot自动配置 ?Spring Boot执行流程 [基本要求] ?了解Spring Boot的发展和优点 ?掌握Spring Boot项目的构建 ?掌握Spring Boot的单元测试和热部署 ?熟悉Spring Boot的自动化配置原理 ?熟悉Spring Boot的执行流程 [实践与练习] 建议完成相关测试题,并安排上机,重点考核如何编写Spring Boot入门程序,并参考教材进行Spring Boot源码分析。 第2章 Spring Boot核心配置与注解(6学时) [知识点] ?application.properties配置文件 ?application.yaml配置文件 ?使用注解@ConfigurationProperties和@Value注入属性 ?两种注解对比分析 ?使用@PropertySource加载配置文件 ?使用@ImportResource加载XML配置文件 ?使用@Configuration编写自定义配置类 ?使用Profile文件进行多环境配置 ?使用@Profile注解进行多环境配置 ?随机值设置以及参数间引用 [重点] ?application.properties配置文件

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.

Spring定时器的使用

定时执行任务,这是项目中常用的东西,今天我们来做一个使用Spring定时器进行任务定制的小例子,仅供学习! 1首先要增加相应的JAR。 因为这是一个小例子,使用的JAR包不是很多,用到了spring.jar, quartz-all-1.6.5.jar,quartz-1.5.2.jar,commons-logging.jar, log4j-1.2.14.jar!不用关心版本,从你下载到的Spring中找即可。 定义web.xml配置文件 要在配置文件中定义Spring和Log4j的使用。具体看工程即可。重点关注的是如果你做例子时使用了web-app_2_5.xsd,那么在部分服务器上是跑不起 来的。 Xml代码 1 1 1 1 1 1index.jsp 1 1

1 1 1contextConfigLocation 1/WEB-INF/spring.xml 1 1 1 1log4jConfigLocation 1/WEB-INF/classes/log4j.properties 1 1 1 1 1 1org.springframework.web.util.Log4jConfigListener 1 1 1 1 1 1org.springframework.web.context.ContextLoaderListener 1

SpringBoot实现定时任务

SpringBoot 定时任务@Scheduled实现定时任务 在启动项中加入@EnableScheduling 在定时任务中加入@Component交于Spring管理 使用@Scheduled(fixedDelay = 5000) 5秒跑一次任务 支持支持cron表达式

按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数) 月(0~11) 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 7.年份(1970-2099) 其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?. 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 0 0 12 ? * WED 表示每个星期三中午12点 "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期间的每1分钟触发

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午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" 每月的第三个星期五上午10:15触发 有些子表达式能包含一些范围或列表 例如:子表达式(天(星期))可以为“MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT” “*”字符代表所有可能的值 因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天 “/”字符用来指定数值的增量 例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样

【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 的依赖,其余依赖请根据需求自行引入

Spring定时任务配置

Spring框架中的定时器如何使用和配置 1.包 ?spring-2.0.6.jar Spring框架的核心包 ?jta.jar 会用到包中的usertransaction,具体什么用此处暂时不论 ?quartz-1.6.0.jar 会用到CronTrigger这个类,通过表达式实现精确的定时?commons-logging-1.1.1.jar 日志管理包 ?commons-collections-3.2.1.jar 集合工具包 2.首先是配置你要定时加载的目标类 第一种方法:xml方式,例如: 第二种方法:基于注解的方式。例如:@Service(smsSendService) 注:此注解用于Service层 3.配置你的定时器详情 解释: p:targetObject-ref:指向你要定时加载的目标类。 p:targetMethod:指向定时加载目标类中需要执行的方法。即定时执行smsSendService类的autoSmsTime()方法。 p:concurrent="false":表示不并发操作。对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job 就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。 注意:smsSendService类的autoSmsTime()方法没有参数,如果smsSendService有两个方法autoSmsTime()和autoSmsTime(String argument),则spring只会去执行无参的autoSmsTime().例如: 1 2 3 public void autoSmsTime(){ System.out.println("无参......"); } 4.配置定时器时间间隔

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.

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() { // 执行业务逻辑 // ........

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的表达式。

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告诉触发器以怎样的频度运行这个工作(以毫秒作为单位)。这里,我们

SpringMVC+Nutz框架介绍

SpringMVC+Nutz自主框架介绍 一、框架概况 基于经典技术组合(Spring MVC、Apache Shiro、Bootstrap UI)开发的企业级分布式基础开发平台,实现企业开发常用功能:组织机构、角色用户、权限授权、数据权限、内容管理、微信管理等。 使用的后台技术包括Spring、Spring MVC、Spring Cache、Nutz、Shiro、Jedis、Dubbo、RabbitMQ、Quartz、Elasticsearch、FastDFS、Ehcache、Beetl、Log4j等,前端技术包括Jquery、Bootstrap、Pjax等。 ?模块化可自由拆分(分布式可选择Dubbo/RSF实现) ?集成Shiro权限框架(支持二级缓存,通过Redis实现支持session同步) ?集成Ehcache缓存(Shiro一级缓存) ?集成Jedis(redis的java实现,支持Redis集群模式和单机模式切换) ?集成Email服务(可选择启用) ?集成Quartz定时任务(支持集群部署) ?集成Beetl模板引擎(功能强大便捷) ?支持语言国际化(直接写汉字不需要Unicode转换,一种语言一个文件夹) ?支持方法日志记录(@SLog注解自动记录日志) ?支持文件输出(@SFile注解自动输出文件,比如输出PDF格式) ?支持json输出(@SJson注解自动输出json字符串) ?支持自定义路由(显性转发或隐性转发)

?支持API Token及应用管理(Jwt实现token机制) ?后台管理界面采用Pjax+Bootstrap ?系统模块(单位、角色、用户、菜单等完整的权限体系) ?CMS模块(简易的内容管理功能) ?微信模块(支持多公众号、微信支付等功能) 二、与xx框架对比分析 1、Dao 1)使用NutDao,简化数据库增删改查操作,天然的过滤非法字符,防止sql注入; 2)兼容各类型数据库,只需对自定义SQL部分进行兼容性改造即可快速部署在MySQL、Oracle/达梦、MSSQL等各类数据库上;3)可通过实体类生成各类数据库的表结构、索引、序列或触发器等,支持动态分表,建立空白数据库启动项目时自动初始化表 结构和数据; 4)支持多数据源,并兼容hibernate、mybatis等其他第三方ORM 框架; 2、Service 1)Spring Cache方法缓存,对方法执行结果进行缓存,而非每条表数据,因为大部分业务是不需要用缓存的,比如后台的增删改 查管理;以前项目中经常出现因为缓存嵌套的问题加上缓存更

Spring定时器在SSH框架中的应用.

Spring定时器在SSH框架中的应用 ---Spring调度任务 本课题参考自《Spring in action》。并非应用系统中发生的所有事情都是由用户的动作引 起的。有时候,系统自己也需要发起一些动作。例如,集抄系统每天早上六点把抄表数据传送给营销系统。我们有两种选择:或者是每天由用户手动出发任务,或者让应用系统中按照预定的计划自动执行任务。 在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例: 1. Java Timer调度器 首先定义一个定时器任务,继承java.util.TimerTask类实现run方法 import java.util.TimerTask; import xj.service.IJdbc1Service; import xj.service.IJdbc2Service; public class DayDataTimerTask extends TimerTask{ private IJdbc2Service jdbc2Service=null; private IJdbc1Service jdbc1Service=null; public void run({ SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"; System.out.println("日冻结转接任务开始时间:"+df.format(Calendar.getInstance(.getTime(; System.out.println("日冻结转接任务结束时间:"+df.format(Calendar.getInstance(.getTime(; } //通过set方法获取service服务,如果没有该方法,则为null public void setJdbc2Service(IJdbc2Service jdbc2Service { this.jdbc2Service = jdbc2Service; } public void setJdbc1Service(IJdbc1Service jdbc1Service { this.jdbc1Service = jdbc1Service;

Spring定时器配置(XML和注解)

Spring配置定时器(注解+xml)方式—整理 一、注解方式 1.在Spring的配置文件ApplicationContext.xml,首先添加命名空间 xmlns:task="https://www.360docs.net/doc/fe16459797.html,/schema/task" https://www.360docs.net/doc/fe16459797.html,/schema/task https://www.360docs.net/doc/fe16459797.html,/schema/task/spring-task-3.1.xsd 2.最后是我们的task任务扫描注解 3.spring扫描位置 4.写自己的定时任务 @Component//import https://www.360docs.net/doc/fe16459797.html,ponent; public class MyTestServiceImpl implements IMyTestService{ @Scheduled(cron="0/5****?")//每5秒执行一次 public void myTest(){ System.out.println("进入测试"); } } 注意:定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定一个proxytargetclass的某个值为true) 二、XML方式 1.在spring配置文件中创建bean,创建schedule 2.在spring配置文件中创建bean,创建你的triggers 3.在spring配置文件中创建bean,指定定时器作用在那个类那个方法上面

quartz实现多任务动态调度

一、说明 由于最近工作要实现定时任务的执行,而且要求定时周期是不固定的,所以就用到了quartz来实现这个功能; spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错。至于原因,则是spring对于quartz的支持实现,org.springframework. scheduling.quartz.CronTriggerBean继承了org.quartz.CronTrigger,在quartz1.x 系列中org.quartz.CronTrigger是个类,而在quartz2.x系列中org.quartz.CronTrigg er变成了接口,从而造成无法用spring的方式配置quartz的触发器(trigger)。 我使用的quartz版本是2.2.1 。 最终实现的功能: 1)项目启动时,可执行的定时任务启动,按时执行相应的逻辑; 2)可添加新任务,删除任务,更新任务,暂停任务,恢复任务; 二、添加quartz包 我使用Gradle构建项目,加包时只需下面一行即可: compile "org.quartz-scheduler:quartz:2.2.1" 三、配置及使用 1. 配置任务调度器(对应的文件名为quartz-task.xml) ? 1 2 3

java中spring与Quartz 整合定时任务

现在想要获得在特定时间或者指定时间执行相应功能 有两种做法 在applicationContext.xml中写入如下Bean 1000 3600000 true 然后写SampleTask类,如下: package com.css.wam.portlet;

java定时任务

Java定时任务的实现 一、通过java本身提供的接口实现 关键词:监听器(Listener)和定时器(Timer)任务(Task)。 方式: 首先:建立一个监听器 MyListener import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyListener implements ServletContextListener { private Timer timer = null; public void contextInitialized(ServletContextEvent event) { timer = new Timer(true); //设置任务计划,启动和间隔时间 timer.schedule(new MyTask(), 0, 86400000); } public void contextDestroyed(ServletContextEvent event) { timer.cancel(); } } 监听器web.xml配置 com.fastunit.samples.listener.MyListener 任务MyTask import java.util.TimerTask; public class MyTask extends TimerTask { // 继承TimerTask public void run() { // 此处添加具体需要执行的任务代码 } } 上面的代码虽然简单实用,但是在web项目中的时候为了避免无法加载到的问题,在web

spring多个定时任务quartz配置

spring多个定时任务quartz配置spring多个定时任务quartz配置2010-12-08 1034 A.M.xml version1.0encodingUTF-8 beans xmlns bean idjob1classcom.job.Job1///任务1 bean idjob2classcom.job.Job2///任务2 bean idjobDetail_1 classorg.springframework.scheduling.quartz.MethodInvokingJo bDetailFactoryBean property nametargetObject ref beanjob1/ /property property nametargetMethod value jobMethod1/value//执行的方法/property /bean bean idjobDetail_2 classorg.springframework.scheduling.quartz.MethodInvokingJo bDetailFactoryBean property nametargetObject ref beanjob2/ /property property nametargetMethod value jobMethod2/value /property /bean bean idcronTrigger_1 classorg.springframework.scheduling.quartz.CronTriggerBean property namejobDetail ref beanjobDetail_1/ /property property namecronExpression value 00 0/value//每天凌晨12点执行一次/property /bean bean idcronTrigger_2 classorg.springframework.scheduling.quartz.CronTriggerBean property namejobDetail ref beanjobDetail_2/ /property property namecronExpression value 00/1/value//每小时执行一次 /property /bean bean classorg.springframework.scheduling.quartz.SchedulerFactoryB

相关文档
最新文档