spring定时任务
spring提供了异步执行和任务调度的功能,可以简化程序员的工作。这两种功能在spring中是放在一起讲的,很容易看晕,网上的文章也很少有分开讲的,在这里只讲任务调度也就是定时任务的使用方式。可以直接看官方文档的34. Task Execution and Scheduling章节。
本文基于spring4.x,xml配置方式,java config用不惯啊...java config配置的方式直接看上面的spring官方文档对应找吧
- 基于xml开启spring的任务调度(也可以通过EnableScheduling注解使用java config的方式开启)
<!--在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.xsd">
<!--开启任务调度的注解驱动,并设置任务调度使用的调度器-->
<!--不设置scheduler默认使用大小为1的线程池-->
<task:annotation-driven scheduler="myScheduler"/>
<!--任务调度的调度器只接受一个线程池的线程数,默认是1-->
<task:scheduler id="myScheduler" pool-size="10"/>
</beans>
- 设置需要定时执行的方法(方法所在的类必须被spring管理)
@Component
public class SpringTaskDemo {
//Scheduled注解还有几种设置定时任务的属性,点进去看源码或者百度谷歌,资料很多
@Scheduled(fixedDelay = 1000)
public void task() {
System.out.println("spring scheduled task run");
}
}
- 将普通类的方法设置为定时执行
<task:scheduler id="myScheduler" pool-size="10"/>
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="beanA" method="methodA" fixed-delay="5000" initial-delay="1000"/>
<task:scheduled ref="beanB" method="methodB" fixed-rate="5000"/>
<task:scheduled ref="beanC" method="methodC" cron="*/5 * * * * MON-FRI"/>
</task:scheduled-tasks>
- Tips
肥肥小浣熊spring的定时任务是一种抽象,即支持jdk,也可以使用第三方开源工具Quartz,timer有关的内容可以看多线程基础中对应的部分
网友评论