spring3中spring定时器配置的cron中一个月的最后一天要如何设定

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Spring3中定时器的配置使用之Quartz
需求:把前一天生成的报表图片删除。
分析:机械的人工删除是不行的,这时就会想到定时器,说到定时器,一定会想到Timer,但是他只能简单的进行时间单位类似倒计时的功能实现,如果要精确每年每月的日期甚至星期几,那么换算起来就比较麻烦,这里可以用Spring与Quartz整合来完成定时器的实现。
虽然Quartz已经发布了2.X版本,但是Spring3目前只能整合及以下版本。
&?xml version="1.0"
encoding="GBK"?&
&beans xmlns=""&
xmlns:xsi=""
xmlns:p=""&
xmlns:task=""&
xsi:schemaLocation="&&
这里加入了&&
xmlns:task="http://www.springframework.org/schema/task"&&
&&!--&两种定时器配置,任选其一即可&&
spring3.0之前的用法,配置比较繁琐&--&&
&!--&值班提醒定时器&
这个是定时器要调用方法的类
& &bean id="deletePicTimer"
class="com.newauto.util.DeletePicTimer"
定义调用对象和调用对象的方法&&
id="jobtaskista"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&&&&&&&&&&
&!-- 调用的类
--&&&&&&&&&&&&
&property name="targetObject"&
bean="deletePicTimer"/&&&&&&&&&&&
&/property&&&&&&&&&&&&
& &!-- 调用类中的方法
--&&&&&&&&&&&&
& &property
name="targetMethod"&&&&&&&&&&&&
&value&deletePic&/value&&&&&&&&
&/property&&&&&
&&/bean&&&&&&&&
& &!-- 复杂触发器 --&
&bean id="remindCronTriggerista"
class="org.springframework.scheduling.quartz.CronTriggerBean"&
&& &property
name="jobDetail"&&
&ref bean="jobtaskista"/&
&/property& &
&property name="cronExpression"&
&!--& 每天23:59:59调用一次
&value&59 59 23 * *
?&/value&&&
&/property&
& &!-- 调度工厂&
&&bean id="schedulerista"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&
&property name="triggers"&
bean="remindCronTriggerista"/&
&&&/property&
&!--& spring3.0之后的新用法,配置有变化,而且比以前简单了很多&--&&
&&!--&定时器&
这个是定时器要调用方法的类 --&&
& &bean id="deletePicTimer"
class="com.newauto.util.DeletePicTimer"&&/bean&
定义调用对象和调用对象的方法&&
&task:scheduled-tasks&
调用的类deletePicTimer&&&
调用类中的方法deletePic&&
这里表示的是每天23:59:59调用一次 --&
&task:scheduled ref="deletePicTimer"
method="deletePic" cron="59 59 23 * * ?" /&
&/task:scheduled-tasks&&
public class DeletePicTimer
&&& private
static boolean isRunning =
&&& private
final Logger logger = Logger.getLogger(DeletePicTimer.class);
&&& public void
deletePic()
// 为防止24小时执行下来,任务还未执行完(当然,一般任务是没有这么长的),
// 避免第二次又被调度以引起执行冲突,设置了当前是否正在执行的状态标志isRunning
if (!isRunning)
&&&&&&&&&&&
isRunning =
&&&&&&&&&&&
("开始执行指定任务");
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
ClassLoader cl =
Thread.currentThread().getContextClassLoader();
&&&&&&&&&&&&&&&
InputStream is =
cl.getResourceAsStream("picpath.properties");
&&&&&&&&&&&&&&&
Properties p = new Properties();
&&&&&&&&&&&&&&&
p.load(is);
&&&&&&&&&&&&&&&
String picpath = p.getProperty("picpath");
&&&&&&&&&&&&&&&
// 声明变量
&&&&&&&&&&&&&&&
File[] fls =
&&&&&&&&&&&&&&&
File file = new File(picpath);
&&&&&&&&&&&&&&&
if (file.exists() &&
file.isDirectory())
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
// 文件夹*是否存在
&&&&&&&&&&&&&&&&&&&
fls = file.listFiles();
&&&&&&&&&&&&&&&&&&&
if (fls != null)
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
for (File fl : fls)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
fl.delete();
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
catch (Exception e)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
logger.error("删除失败!");
&&&&&&&&&&&
&&&&&&&&&&&
isRunning =
&&&&&&&&&&&
("指定任务执行结束");
&&&&&&&&&&&
logger.error("上一次任务执行还未结束");
注:把存放图片的路径配置在picpath.properties中,用到时直接读取,也方便以后修改,不用再改动源程序代码。
cronExpression表达式:
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空,
表达式意义
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 年的每天上午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年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
"0 6 * * *"& 每天早上6点
"0 */2 * * *"每两个小时
"0 23-7/2,8 * * *" 晚上11点到早上8点之间每两个小时,早上八点
"0 11 4 * 1-3" 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
"0 4 1 1 *" 1月1日早上4点
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。下次自动登录
现在的位置:
& 综合 & 正文
spring定时器quartz
时间设定 cron表达式
spring配置文件bean处配置属性&property name="cronExpression"&
&value&10 * * * * ? *&/value&
value值用的是cron表达式
在线cron生成器
看下面解释看不懂的,不熟悉规则的,新手也可以快速得到想要的cron表达式。
按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数)月(0~11) 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 7.年份() 其中每个元素可以是一个值(如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点 有些子表达式能包含一些范围或列表 例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT” “*”字符代表所有可能的值 因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天 “/”字符用来指定数值的增量 例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样 “?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值 当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?” “L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写 但是它在两个子表达式里的含义是不同的。 在天(月)子表达式中,“L”表示一个月的最后一天 在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT 如果在“L”前有具体的内容,它就具有其他的含义了 例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五 注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题
还有另一种&property name="repeatInterval"&
&value&30000&/value&
单位是毫秒
&&&&推荐文章:
【上篇】【下篇】<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&spring定时器的配置 | 罗生沙博客&#8211;分享是一种快乐
欢迎来到 博客,如果您认为不错,请分享给您身边的朋友,分享是一种快乐!qq交流群:
2,124 views
定时器的配置其实很简单,此处使用maven下载相应的jar,主要用到的jar包有相关jar和quartz.jar。
1、先看下项目的目录结构
2、MyTimer类
package com.luoshengsha.
public class MyTimer {
public void run() {
System.out.println("定时器已成功启动!");
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&
&!-- 配置定时器 --&
&bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&
&property name="triggers"&
&ref local="myTrigger" /&&!-- 定时器的引用 --&
&/property&
&!-- 定义定时器 --&
&bean id="myTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean"&
&property name="jobDetail"&
&!-- 定义job工厂 --&
&bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&
&!-- 定义目标执行类 --&
&property name="targetObject"&
&bean class="com.luoshengsha.timer.MyTimer"/&
&/property&
&!-- 定义目标类的目标执行方法 --&
&property name="targetMethod" value="run" /&
&!-- 定义是否并发执行? --&
&property name="concurrent" value="false" /&
&/property&
&!-- 定义触发时间 --&
&property name="cronExpression"&
&value&0/5 * * * * ?&/value&&!-- 触发时间的格式为:秒 分 时 日 月 星期 年 ,中间用空格隔开--&
&/property&
4、web.xml
&?xml version="1.0" encoding="UTF-8"?&
&!-- 如果定义的是web-app_2_5.xsd,那么在部分服务器上是跑不通过的 --&
&web-app version="2.4" xmlns="/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/j2ee
/xml/ns/j2ee/web-app_2_4.xsd"&
&!-- 定义Spring配置文件的加载路径 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring.xml&/param-value&
&/context-param&
&listener&
&listener-class&
org.springframework.web.context.ContextLoaderListener
&/listener-class&
&/listener&
&/web-app&
5、pom.xml
&project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&
&modelVersion&4.0.0&/modelVersion&
&groupId&luoshengsha&/groupId&
&artifactId&spring_timer&/artifactId&
&version&0.0.1-SNAPSHOT&/version&
&packaging&war&/packaging&
&properties&
&spring.version&3.0.5.RELEASE&/spring.version&
&/properties&
&dependencies&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-context&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-core&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-beans&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-web&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-asm&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-tx&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-context-support&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-expression&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.quartz-scheduler&/groupId&
&artifactId&quartz&/artifactId&
&version&1.8.5&/version&
&/dependency&
&/dependencies&
&/project&
6、定时时间配置的一点说明(以下内容来自于):
********************************************************************************
发送间隔时间表达式的使用
位置 含义 允许的特殊字符
1 秒(0-59) , - * /
2 分(0-59) , - * /
3 小时(0-23) , - * /
4 日期(1-31) , - * / ? L C
5 月 (JAN-DEC 或 1-12) , - * /
6 星期 , - * / L C #
7 年(可选,,如果为空则表示全部时间范围) , - * /
通配符和特殊字符的含义
* 任意值。使用在表示的任何域表示该值不需要检查。
? 无特定值。通常和其它制定的值一起使用,表示一个值必须被显示但是不必检查
- 范围。例如在小时部分 10-12 ,表示 10,11,12 点
, 列分隔符。允许你指定一系列的值,例如在星期域中 MON,TUE,WED
/ 增量。表示一个值的增量。例如在分钟域中 0/1 表示从 0 开始,每次增加一分钟
L L是英文Last的缩写。在日期和星期域中意思有一点不同。在日期域中使用代表这个月的最后一天(3月31号,2月29号)。
使用在星期域中时永远是同一个值:7-Saturday(星期六)。希望使用星期中某一天时可以使用,例如 6L 表示每个月的最后一个周五
# 允许使用在星期域中,代表这个月的第几个星期。例如 1#2 表示每个月的第一个星期一
C 日期值。对于指定日期和星期的支持还没有完成
********************************************************************************
时间指定格式:
&property name="cronExpression"&
&value&0/5 * * * * ?&/value&
&/property&
至少是6个时间元素,最多为7个时间元素
格式描述如下:
每月第几天 1-31
月 1-12或JAN-DEC
每个星期第几天 1-7或SUN-SAT
注意:每月第几天和每星期第几天是互斥的,两个只能设置一个,不设置的以 ? 符号编写
如果有好几个时间点,可以使用 , 符号,如:0 0 10,12,14 * * ?,表示每天的10点、12点、14点要执行JOB
对于连续的时间可以使用 - 符号,如:0 0 10,12,14 1-15 * ?,表示每月的1到15号10点、12点、14点执行JOB
时间格式中的年可有可无
对于 0/1 * * * * ? 此类写法,则表示每秒执行一次JOB,也可以写成如:0 0/5 * * * ? 代表每五分钟执行一次JOB
*******************************************************************************
7、源码下载地址:
本文出自 ,欢迎转载,转载时请注明出处及相应链接。
本文永久链接:}

我要回帖

更多关于 cron定时器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信