不知道大家有没有需要这样的功能,比如某功能需要每天或者每周或者每月查询一次或者执行一次相同的功能,
例如一些查询统计的周报或者月报,需要以excel的形式下载下来或者发送到某人邮箱里,这时候如果每次都要手动的去查询一次很麻烦。(程序员就是希望繁琐重复的事情能够用程序来代替)。
于是当小编有这样的需求的时候,当然先网上搜索看大家有没有可行性办法。当然搜到的办法很多,但是小编还是比较喜欢spring基于注解的形式,来定时的执行某段代码。
一:在spring配置文件中添加相应配置,以支持定时任务的注解实现
(1)在xml里加入task的命名空间
<!-- beans里添加:-->
xmlns:task="http://www.springframework.org/schema/task"
<!-- xsi:schemaLocation里添加:-->
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd
(2)配置定时任务的线程池(注:spring定时任务默认单线程,推荐配置线程池,若不配置多任务下会有问题。)
<task:scheduler id="scheduler" pool-size="10" />
(3)启用注解驱动的定时任务
<task:annotation-driven scheduler="scheduler"/>
以上配置,找到你项目的spring相关配置里配置,小编是在spring-mvc.xml 里配置
(二)代码部分只需要加上两个注解即可
(1)在定时类上加@Component("xxxxx")
如果你是在springmvc里面,本身就配置了@Service,@Controller的话,这里就可以不用再配置了,本身@Component就是范注解,就是为了让spring能够管理的一个功能
(2)在需要定时执行的方法上加@Scheduled(corn=xxxxxxxx)
xxxxxxxx的具体功能,大家可以参照corn的用法,不过这个corn也没有必要去记,太多了,就是要用的时候查查或者直接使用在线corn表达式生成。
corn表达式在线生成地址:http://cron.qqe2.com/
如图所示,很方便就可以生成你想要的定时启动时间啦
(3)示例代码
@Controller
public class Timingtest{
@Scheduled(cron = "0 00 12 * * ?")
public void timingSend(){
System.out.println("12:00定时任务启动");
}
}
12:00自动运行如图
以上内容参考综合网络,略有改动,感谢原作者的分享
主要参考原文地址:https://www.cnblogs.com/qiuting/p/7755646.html
corn表达式详解可以参考: