在Spring中常常使用定时器去完成一些定时任务,比如每天清除某些缓存等,Spring中常见的定时器有两种,一种是比较原生的,一种是结合Quzrt框架。
第一种方便,配置少,随时可用
第二种比较全面,配置比较复杂 侵入性比较低
先从原生的学起,比较好理解
1.搭建spring基础框架使项目能运行。
2.配置spring-servlet.xml
尤其是图中前两个地方
3.在被扫描的包下创建任意一个类,添加注解,使其被spring扫描,如图:
注意要加上注解@DependsOn
被注入的两个servicce基本类似:
4.运行项目就可以看到效果:
另外一个结果:
5.总结:这个简单的事例能说明如下几点:
1.定时器通过注入调用其他service
2.可以注入多个
3.默认的定时器任务是单线程串行的
4.目前还没发现如何控制定时器的先后顺序,取巧的方法就是通过一个变量来控制
5.通过第二种结果,说明两个定时器的执行顺序是随机的
6.注意点:多个定时器时,如果有定时器未按时执行,可能的原因是:由于多个定时器是串行执行的,上一个定时器执行的时间太长,导致下一个定时器无法按时执行
第二种:
下载quartz.jar
配置spring-servlet.xml
最后一个行就是目标方法。
总结:这种方式最大的优点就是侵入性低,被定时执行的方法完全是一个普通方法。
注意点:定时器使用时注意spring启动的顺序,一定要在bean注入完毕后再
执行定时器(指如果定时器中需要注入时),顺序错了可能会报: