- 浏览: 800253 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yuhanwm910731:
我现在需要实现复选(非级联选择)的树形下拉菜单,麻烦发给我一份 ...
extjs3.X支持树型的下拉控件 -
shine1200:
“所以咱们现在设置的虚拟路径“/message/upload/ ...
weblogic虚拟路径的配置和使用(2) -
icefireforest:
Fangrn 写道jx_dream 写道楼主,我最近在做树形下 ...
extjs3.X支持树型的下拉控件 -
cloudfile:
谢谢分享!
c++库c#调用开发时需要注意的一点 -
xuweilinbegin:
我也要一份哦:xuweilin15353@163.com,谢谢 ...
extjs3.X支持树型的下拉控件
有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz。
1.Java Timer定时
首先继承java.util.TimerTask类实现run方法
1. import java.util.TimerTask;
2. public class EmailReportTask extends TimerTask{
3. @Override
4. public void run() {
5. ...
6. }
7. }
在Spring定义
...
配置Spring定时器
1. < bean id = "scheduleReportTask" class = "org.springframework.scheduling.timer.ScheduledTimerTask" >
2. < property name = "timerTask" ref = "reportTimerTask" />
3. < property name = "period" >
4. < value > 86400000 value >
5. property >
6. bean >
timerTask属性告诉ScheduledTimerTask运行哪个。86400000代表24个小时
启动Spring定时器
Spring的TimerFactoryBean负责启动定时任务
< bean class = "org.springframework.scheduling.timer.TimerFactoryBean" >
< property name = "scheduledTimerTasks" >
< list > < ref bean = "scheduleReportTask" /> </list >
<property >
</bean >
scheduledTimerTasks里显示一个需要启动的定时器任务的列表。
可以通过设置delay属性延迟启动
< bean id = "scheduleReportTask" class = "org.springframework.scheduling.timer.ScheduledTimerTask" >
< property name = "timerTask" ref = "reportTimerTask" />
< property name = "period" >
< value > 86400000 </value >
<property >
< property name = "delay" >
< value > 3600000 value >
</property >
</bean >
这个任务我们只能规定每隔24小时运行一次,无法精确到某时启动
2.Quartz定时器
Quartz下载地址:http://www.opensymphony.com/quartz
首先继承QuartzJobBean类实现executeInternal方法
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class EmailReportJob extends QuartzJobBean{
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
...
}
}
在Spring中定义
< bean id = "reportJob" class = "org.springframework.scheduling.quartz.JobDetailBean" >
< property name = "jobClass" >
< value > EmailReportJob value >
property >
< property name = "jobDataAsMap" >
< map >
< entry key = "courseService" >
< ref bean = "courseService" />
entry >
map >
property >
bean >
在这里我们并没有直接声明一个EmailReportJob Bean,而是声明了一个JobDetailBean。这个是Quartz的特点。JobDetailBean是Quartz的 org.quartz.JobDetail的子类,它要求通过jobClass属性来设置一个Job对象。
使用Quartz的JobDetail中的另一个特别之处是EmailReportJob的courseService属性是间接设置的。 JobDetail的jobDataAsMap属性接受一个Map,包括设置给jobClass的各种属性,当。JobDetailBean实例化时,它 会将courseService Bean注入到EmailReportJob 的courseService 属性中。
启动定时器
Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。Spring提供了两个触发器SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean与scheduledTimerTasks类似。指定工作的执行频度,模仿scheduledTimerTasks配置 .
startDelay也是延迟1个小时启动
CronTriggerBean指定工作的准确运行时间
属性cronExpression告诉何时触发。最神秘就是cron表达式:
Linux系统的计划任务通常有cron来承担。一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。从左到右:
1.秒2.分3.小时4.月份中的日期(1-31)5.月份(1-12或JAN-DEC)6.星期中的日期(1-7或SUN-SAT)7.年份(1970-2099)
每个元素都显示的规定一个值(如6),一个区间(9-12),一个列表(9,11,13)或一个通配符(*)。因为4和6这两个元素是互斥的,因此应该通过设置一个问号(?)来表明不想设置的那个字段,“/”如果值组合就表示重复次数(10/6表示每10秒重复6次)。
启动定时器
triggers属性接受一组触发器。
秒
|
0-59
|
, - * /
|
||
分
|
0-59
|
, - * /
|
||
小时
|
0-23
|
, - * /
|
||
日期
|
1-31
|
, - * ? / L W C
|
||
月份
|
1-12 或者 JAN-DEC
|
, - * /
|
||
星期
|
1-7 或者 SUN-SAT
|
, - * ? / L C #
|
||
年(可选)
|
留空, 1970-2099
|
, - * /
|
The '*' character is used to specify all values. For example, "*" in the minute field means "every minute".
“*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。
The '?' character is allowed for the day-of-month and day-of-week
fields. It is used to specify 'no specific value'. This is useful when
you need to specify something in one of the two fileds, but not the
other. See the examples below for clarification.
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。
月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号(?)来表明不想设置那个字段
The '-' character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12".
“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。
The ',' character is used to specify additional values. For example
"MON,WED,FRI" in the day-of-week field means "the days Monday,
Wednesday, and Friday".
“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.
The '/' character is used to specify increments. For example "0/15" in
the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in
the seconds field means "the seconds 5, 20, 35, and 50". Specifying '*'
before the '/' is equivalent to specifying 0 is the value to start with.
Essentially, for each field in the expression, there is a set of
numbers that can be turned on or off. For seconds and minutes, the
numbers range from 0 to 59. For hours 0 to 23, for days of the month 0
to 31, and for months 1 to 12. The "/" character simply helps you turn
on every "nth" value in the given set. Thus "7/6" in the month field
only turns on month "7", it does NOT mean every 6th month, please note
that subtlety.
The 'L' character is allowed for the day-of-month and day-of-week
fields. This character is short-hand for "last", but it has different
meaning in each of the two fields. For example, the value "L" in the
day-of-month field means "the last day of the month" - day 31 for
January, day 28 for February on non-leap years. If used in the
day-of-week field by itself, it simply means "7" or "SAT". But if used
in the day-of-week field after another value, it means "the last xxx day
of the month" - for example "6L" means "the last friday of the month".
When using the 'L' option, it is important not to specify lists, or
ranges of values, as you'll get confusing results.
L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天,
如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个
星期五,
The 'W' character is allowed for the day-of-month field. This character
is used to specify the weekday (Monday-Friday) nearest the given day. As
an example, if you were to specify "15W" as the value for the
day-of-month field, the meaning is: "the nearest weekday to the 15th of
the month". So if the 15th is a Saturday, the trigger will fire on
Friday the 14th. If the 15th is a Sunday, the trigger will fire on
Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday
the 15th. However if you specify "1W" as the value for day-of-month, and
the 1st is a Saturday, the trigger will fire on Monday the 3rd, as it
will not 'jump' over the boundary of a month's days. The 'W' character
can only be specified when the day-of-month is a single day, not a range
or list of days
.
The 'L' and 'W' characters can also be combined for the day-of-month
expression to yield 'LW', which translates to "last weekday of the
month".
The '#' character is allowed for the day-of-week field. This character
is used to specify "the nth" XXX day of the month. For example, the
value of "6#3" in the day-of-week field means the third Friday of the
month (day 6 = Friday and "#3" = the 3rd one in the month). Other
examples: "2#1" = the first Monday of the month and "4#5" = the fifth
Wednesday of the month. Note that if you specify "#5" and there is not 5
of the given day-of-week in the month, then no firing will occur that
month.
The 'C' character is allowed for the day-of-month and day-of-week
fields. This character is short-hand for "calendar". This means values
are calculated against the associated calendar, if any. If no calendar
is associated, then it is equivalent to having an all-inclusive
calendar. A value of "5C" in the day-of-month field means "the first day
included by the calendar on or after the 5th". A value of "1C" in the
day-of-week field means "the first day included by the calendar on or
after sunday".
关于cronExpression的介绍:
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
表达式意义
"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触发
每天早上6点
0 6 * * *
每两个小时
0 */2 * * *
晚上11点到早上8点之间每两个小时,早上八点
0 23-7/2,8 * * *
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3
1月1日早上4点
0 4 1 1 *
0 0/2 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * ? 每天8点到23点间每2分钟执行一次
quartz的高级特性不仅如此
1 数据库存储
2 集群支持
3 数据库持久化任务,trigger
4 trigger 的停止,运行
5 任务的任意添加
6 比corntrigger 更详尽的任务安排
7 线程的内部数据交换
发表评论
-
提供IT系统运维支持、系统优化方案
2012-10-26 14:46 6提供IT系统运维支持、系统优化方案,有多个运维实施经验。 ... -
Java指定编码读写文件(UTF-8)
2010-11-30 14:00 3102有时我们需要程序动态生成jsp文件,采取系统默认的编码操作的文 ... -
was6.0发布struts2项目异常
2010-11-18 18:39 1982[10-11-18 18:31:33:609 CST] 000 ... -
利用spring提供的字符编码过滤器
2010-11-14 11:55 1964<!-- spring的字符集过滤器 --> ... -
简单的几句CSS布局口诀
2010-11-10 16:41 960简单的几句CSS布局口诀,就可以写出精简,标准的样式。 ... -
commons-email笔记
2010-11-10 14:38 1370import java.io.UnsupportedE ... -
如何解决 调用jar程序时出现 outofMemory的问题
2010-10-29 12:02 1198我们在调用 打包好的java程序时,如果程序要加载大量数据的话 ... -
GC策略的调优
2010-09-30 22:30 1617GC 策略在 G1 还没成熟的情况下,目前主要有串行、并 ... -
关于Spring和WebLogic版本兼容的一点小提示
2010-09-30 16:31 2060首先 WebLogic 的各个版本和 JDK 绑定的很紧, 或 ... -
删除WebLogic 10的缓存
2010-09-30 16:07 4636在WebLogic 10上部署了一个应用,最近作了更新并重新部 ... -
weblogic如何强制先加载web-inf/lib下的jar
2010-09-30 16:05 4779方法1: 修改WEB-INF\weblogic.xml (如 ... -
用Log4j自动生成日志
2010-09-27 13:28 1633Log4j是Apache基金会的一 ... -
java smslib发送短信
2010-09-10 10:02 1628public class SendMessage { ... -
使用 Commons-Email 在邮件内容中直接嵌入图片
2010-08-31 20:25 1320我们在发送邮件的时候,如果使用HTML在邮件内容中嵌入图片,& ... -
Struts2中转换Date类型的问题
2010-08-29 09:43 1334Web开发会涉及到很多类型转换的情况。我们知道,页面中的一切值 ... -
java smslib 发送短信错误信息
2010-08-25 15:02 4242org.smslib.GatewayException: GS ... -
rxtx取代javax.comm实现Java跨平台设备端口通信
2010-08-24 08:53 2158From Rxtx <!-- start conte ... -
javascript汉字转拼音代码
2010-08-22 08:21 4571使用方法(1):pinyin.go('汉字'); //例:张家 ... -
关于IE等浏览器在下载JAR文件时的,将后缀更改为zip等问题及解决方案
2010-08-03 12:19 1206httpd.conf这个文件中的mime.types上面,打开 ... -
一句代码解决IE8兼容问题
2010-07-24 15:46 1577这篇文章就是寻求最简单的方法解决ie8兼容问题,当然这只是最简 ...
相关推荐
spring定时器两种实现方式 ,Spring quartz java 定时器 定时任务
使用spring 实现的两种定时任务,使用eclipse直接导入就可使用
spring定时器Spring定时器的两种实现方式Java的Timer类和OpenSymphony的Quartz。
spring 定时器 内含TimerTask实现和Quartz实现两种方式
Spring定时器的两种实现方式.doc
本文向您介绍Spring定时器的两种实现方式,包括Java Timer定时和Quartz定时器,两种Spring定时器的实现方式各有优点,可结合具体项目考虑是否采用。
并非应用系统中发生的所有事情都是由用户的动作引起的。...在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例:
NULL 博文链接:https://wenkaixuan.iteye.com/blog/1821342
定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)
如何在springboot中添加定时器,让程序定时运行。
Spring两种定时器实例配置:Java的TimerTask类和OpenSymphony的Quartz。包含5种配置方式:timer普通定时器、timer特定方法定时器、quartz简单定时器、quartz精确定时器、quartz特定方法定时器。简单实用,一看就会。
NULL 博文链接:https://huangrongyou.iteye.com/blog/1762869
两种方式实现定时执行任务操作,通过spring中集成的timerTask,包含源码及用到的jar包
Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种...
+ AOP注解两种模式切面练习 + 项目启动预处理 + 自定义编辑事务架构 + 上传下载 + 传参注解式校验 + session练习 + 公用日志设计封装 + db乐观锁设计 + 优雅启停 + 配置文件信息加密 + AES加解密 + spring 事件监听...
群发or单独 发送短信,支持两种第三方短信商接口 6. spring aop 事物处理 7. 代码生成器 (freemarker), 代码 zip 压缩打包 8. MD5加密 SHA加密(登录密码用此加密) 9. 数据库连接池 阿里的 druid。Druid在监控、...
本代码是定时器的实例,两种运行模式,一种是直接以Java程序的形式运行,指定加载的配置文件;另一种是在tomcat下运行
在工作中有用到spring task作为定时任务的处理,spring通过接口TaskExecutor和TaskScheduler这两个接口的方式为异步定时任务提供了一种抽象。这就意味着spring容许你使用其他的定时任务框架,当然spring自身也提供了...
springboot学习实战 全新内容 新增全新的springboot2的框架技术点(代码位于当前仓库...开启并行多线程任务两种方式 场景案例分析 介绍Springboot2【Tomcat容器自定义】的用法: Tomcat容器配置用法,使用.yml文件方式
在我了解的过程中发现java实现定时任务有四种,首先是jdk自带的两个Timer,ScheduledThreadPoolExecutor,后者是jdk1.5提出的,因为这个Timer毛病着实有点多,像什么单线程,出问题了其他任务也执