之前框架使用quartz框架执行定时调度问题、html
老大说这配置太麻烦、每一个调度都须要多加在spring的配置中、java
能不能减小配置的量从而提升开发效率、spring
最近看了看spring的 scheduled的使用注解的方式进行调度、框架
感受很方便、起码配置的东西少了不少、ide
因此留下来以备忘了、测试
首先要配置咱们的spring.xmlgoogle
xmlns 多加下面的内容、component
[html] view plaincopy xmlns:task="http://www.springframework.org/schema/task"xml
而后xsi:schemaLocation多加下面的内容、htm
[html] view plaincopy http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd
最后是咱们的task任务扫描注解 [html] view plaincopy task:annotation-driven/
个人配置扫描位置是: [html] view plaincopy context:annotation-config/
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<context:component-scan base-package="com.test"/>
扫描的是com.test这样的包下的内容、 下面须要接口和实现(个人这几个java文件都是com.test的包下的、)
[java] view plaincopy public interface IMyTestService {
public void myTest();
}
[java] view plaincopy @Component //import org.springframework.stereotype.Component;
public class MyTestServiceImpl implements IMyTestService {
@Scheduled(cron="0/5 * * * * ? ") //每5秒执行一次
@Override
public void myTest(){
System.out.println("进入测试");
}
}
执行后控制台就会打印出 进入测试 了
须要注意的几点:
一、spring的@Scheduled注解 须要写在实现上、
二、 定时器的任务方法不能有返回值(若是有返回值,spring初始化的时候会告诉你有个错误、须要设定一个proxytargetclass的某个值为true、具体就去百度google吧)
三、实现类上要有组件的注解@Component
剩下的就是corn表达式了、具体使用以及参数请百度google、
下面只例出几个式子
CRON表达式 含义 "0 0 12 * * ?" 天天中午十二点触发 "0 15 10 ? * *" 天天早上10:15触发 "0 15 10 * * ?" 天天早上10:15触发 "0 15 10 * * ? *" 天天早上10:15触发 "0 15 10 * * ? 2005" 2005年的天天早上10:15触发 "0 * 14 * * ?" 天天从下午2点开始到2点59分每分钟一次触发 "0 0/5 14 * * ?" 天天从下午2点开始到2:55分结束每5分钟一次触发 "0 0/5 14,18 * * ?" 天天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 "0 0-5 14 * * ?" 天天14:00至14:05每分钟一次触发 "0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发 "0 15 10 ? * MON-FRI" 每一个周1、周2、周3、周4、周五的10:15触发