[MVC框架]利用@Scheduled注解创建定时执行的程序
新写的项目中有一个地方要用到定时器,然后就用了spring的@Scheduled注解,顺手就给记录下来了,免得下次用的时候还要翻以前的项目,顺便分享出来,给没用过的兄弟姐妹们做个参考.
这次主要用的是@Scheduled(cron="")定时执行程序.先看一下配置(使用的是SSM框架):
在applicationContext.xml中(Spriing的配置文件):
添加(位置如图):
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.2.xsd
然后扫描注解文件,可能你需要配置一下注解文件在哪个包下,就扫描哪个包...不过...我们这个项目配的是通配...
<context:component-scan base-package="com.*.*" />
然后配置了线程池,提高程序运行速度
<task:scheduler id="scheduler" pool-size="10" />
<task:executor id="executor" keep-alive="3600" pool-size="100-200" queue-capacity="500" rejection-policy="CALLER_RUNS" />
<task:annotation-driven executor="executor" scheduler="scheduler" />
到这里.配置部分就完成了...然后就是使用了...其实使用是非常简单的...跟写平时的controll是一样的...
下面的示例就是一个最简单的定时任务,每隔三秒在控制台打印输出当前的时间...只要服务器在运行,这个程序就会一直执行下去,不需要被其他程序调用.具体的用法都已经写在那一大串注释中了...包括(#),(C),(W)这些通配符的用法...(因为网上搜索一圈,基本上都是copy的...copy其实没啥...copy的不完整就太过分了啊...我们老板扔给我的也是不完整的...囧~我给改了改...),按照注释一点一点的配,肯定能配出来你想要的时间组合~~
代码示例:
import java.text.SimpleDateFormat;
import java.util.Date; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller; /**
* 系统定时器,到达设定时间后,运行设定的代码,使用Scheduled(cron="")标签<p>
* 一个cron表达式有至少6个(也可能7个)由空格分隔的时间元素.<br>
* 按顺序依次为:
* <ol>
* <li> 秒(0-59)[, - * /]
* <li> 分(0-59)[, - * /]
* <li> 时(0-23)[, - * /]
* <li> 天(月)(0-31)[, - * ? / L W C]
* <li> 月(0-11)(月份的简写)[, - * /]
* <li> 天(星期)(1-7)(SUN,MON,TUE,WED,THU,FRI,SAT)[, - * ? / L C #]
* <li> 年份(1970-2099)[, - * /]
* </ol>
* 时间元素可以是:
* <ul>
* <li> 一个值(如6)
* <li> 一个连续区间(9-12)
* <li> 一个间隔时间(8-18/4)(/表示每隔4小时)
* <li> 一个列表(1,3,5)
* </ul>
* 通配符:
* <ol>
* <li> ?:<b>由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.</b>
* <li> *:字符代表所有可能的值,“*”在子表达式(月 )里表示每个月的含义,“*”在子表达式(天(星期) )表示星期的每一天
* <li> /:用来指定数值的增量,在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟运行一次,
* 在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”的含义一样)运行一次
* <li> -:表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12.
* <li> ,:表达一个列表值,如在星期字段中使用"MON,WED,FRI",则表示星期一,星期三和星期五;
* <li> #:该字符只能在星期字段中使用,表示当月某个工作日.
* 如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发.
* <li> L:仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写,在天(月)子表达式中,“L”表示一个月的最后一天.
* 在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT.
* 如果在“L”前有具体的内容,它就具有其他的含义了,例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五.
* <b>在使用“L”参数时,不要指定列表或范围,因为这会导致问题.</b>
* <li> W:表示平日(Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日。大部分的商业处理都是基于工作周的,所以 W 字符可能是非常重要的.
* 例如,日域中的 15W 意味着 "离该月15号的最近一个平日。" 假如15号是星期六,那么 trigger 会在14号(星期五)触发,因为星期五比星期一离15号更近.
* <li> LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;
* <li> C:代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天.
* 1C在星期字段中相当于星期日后的第一天.
* </ol>
*
* 示例:<br>
* <ul>
* <li> 0 0 10,14,16 * * ? 每天10点,14点,16点
* <li> 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
* <li> 0 0 12 ? * WED 每个星期三中午12点
* <li> 0 0 12 * * ? 每天中午12点
* <li> 0 15 10 ? * * 每天上午10:15触发
* <li> 0 15 10 * * ? 每天上午10:15触发
* <li> 0 15 10 * * ? * 每天上午10:15触发
* <li> 0 15 10 * * ? 2005 2005年的每天上午10:15触发
* <li> 0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
* <li> 0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
* <li> 0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
* <li> 0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
* <li> 0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
* <li> 0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
* <li> 0 15 10 15 * ? 每月15日上午10:15触发
* <li> 0 15 10 L * ? 每月最后一日的上午10:15触发
* <li> 0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
* <li> 0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
* <li> 0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
* </ul>
* <br>
* <br>
* */
@Controller
public class SystemeTimer { /**
* 测试,每三秒输出一次时间
* */
@Scheduled(cron="0/3 * * ? * *")
public void test(){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd hh:mm:ss");
String nowtime = sdf.format(date);
System.out.println(nowtime);
}
}
结果:
[MVC框架]利用@Scheduled注解创建定时执行的程序的更多相关文章
- Spring Boot 使用 @Scheduled 注解创建定时任务
在项目开发中我们经常需要一些定时任务来处理一些特殊的任务,比如定时检查订单的状态.定时同步数据等等. 在 Spring Boot 中使用 @Scheduled 注解创建定时任务非常简单,只需要两步操作 ...
- Shell脚本实现每个工作日定时执行指定程序
我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...
- VBA定时执行某程序
OnTime 方法参阅应用于示例特性安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后). expression.OnTime(EarliestTime, Pro ...
- Linux 下用 crontab 设置定时执行python 程序
Linux 下用 crontab 设置定时执行python 程序 方法/步骤 1,先大概了解crontab,/etc/crontab 就是crontab 的配置文件. crontab命令详解可以查 ...
- ASP.NET MVC计划任务实现方法(定时执行某个功能)
系统中定时执行某个任务是比较常用的功能,如一个部门定期向上级部门上报数据是一个典型的例子,下面就简单说说在.net mvc中如何实现定时执行某个功能的方法. 1.首先修改Glocal.asax文件,在 ...
- 使用spring提供的@Scheduled注解创建定时任务
使用方法 操作非常简单,只要按如下几个步骤配置即可 1. 导入jar包或添加依赖,其实定时任务只需要spring-context即可,当然起服务还需要spring-web: 2. 编写定时任务类和方法 ...
- SQL sever 创建定时执行任务
在SQL的使用过程中,我们经常要做些数据备份以及定时执行的任务. 这些任务能够帮助我们简化工作过程. 下面我们了解下如何创建一个定时执行的存储过程. 首先我们要打开 SQL server 代理服务 选 ...
- mysql创建定时执行存储过程任务
sql语法很多,是一门完整语言.这里仅仅实现一个功能,不做深入研究. 目标:定时更新表或者清空表. 案例:曾经做过定时清空位置信息表的任务.(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更 ...
- spring的@Scheduled定时任务,同一时间段的定时任务只会执行一个,其余的会被阻塞,@Scheduled注解定时任务并发执行解决办法,即多线程运行定时任务
原文:https://blog.csdn.net/qq_35937303/article/details/88851064 现有两个定时任务 @Component("aa") pu ...
随机推荐
- SpringBoot整合Freemarker+Mybatis
开发工具 , 开始 新建工程 .选择Spring Initializr 下一步 下一步,选择需要的组件 ..改一下工程名,Finish ..目录结构 首先,修改pom文件 然后,将applicatio ...
- please select android sdk
- redis命令参考和redis文档中文翻译版
找到了一份redis的中文翻译文档,觉得适合学习和查阅.这份文档翻译的真的很良心啊,他是<Redis 设计与实现>一书的作者黄健宏翻译的. 地址:http://redisdoc.com/i ...
- MySQL会发生死锁吗?
SHOW ENGINE INNODB STATUS;来查看死锁日志: SHOW PROCESSLIST;查看进程 MySQL的InnoDB引擎事务有4种隔离级别,主要是为了保证数据的一致性. Inno ...
- 常见的Dos命令
dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录 注意:rd不能删除非空的文件夹,而且只能用于删除文件夹. cd : 进入指定目录 cd.. : 退回到上一级目 ...
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
- Unity 如何检测鼠标双击事件
代码如下: void OnGUI(){ Event e=Event.current; )) Debug.Log("用户双击了鼠标"); }
- ruby数组操作方法汇总
1.数组定义 arr1 = [] arr2 = Array.new arr3 = ['1','2','3'] 2.输出 print arr3,"\n" #123 puts arr3 ...
- Mysql数据库进阶之(分表分库,主从分离)
前言:数据库的优化是一个程序员的分水岭,作为小白我也得去提前学习这方面的数据的 (一) 三范式和逆范式 听起范式这个迟非常专业我来举个简单的栗子: 第一范式就是: 把能够关联的每条数据都拆分成一个 ...
- 042、用volume container 共享数据 (2019-03-05 周二)
参考https://www.cnblogs.com/CloudMan6/p/7188479.html volume container 是专门为其他容器提供 volume 的容器,他提供的卷也可以 ...