1.xml配置方式
web.xml
<!-- 配置spring监听器和配置文件路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
spring配置文件
<beans xmlns="http://www.springframework.org/schema/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.0.xsd" <task:scheduled-tasks> <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/> </task:scheduled-tasks> <context:component-scan base-package="com.gy.mytask" />
这里定时每分钟的的零秒开始执行
cron="0 * * * * ?"
java类,方法无返回值
package com.gy.mytask; import org.springframework.stereotype.Service; @Service public class TaskJob { public void job1() { System.out.println("任务进行中。。。"); System.out.println(Thread.currentThread().getName()); } }
2.注解方式
spring配置文件
<context:annotation-config /> <!-- 可以去掉 --> <context:component-scan base-package="com.gy.mytask" /> <!-- 开启这个配置,spring才能识别@Scheduled注解 --> <task:annotation-driven />
<context:annotation-config/>
作用是显式地向 Spring 容器注册
AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor 这 4 个BeanPostProcessor。注册这4个 BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解。
因此当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。
java类
package com.gy.mytask; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Service public class TaskJob { @Scheduled(cron = "0 * * * * ?") public void job1() { System.out.println("任务进行中。。。"); } }
默认是单线程的
pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1 任务进行中。。。 pool-1-thread-1
参考文章:
http://my.oschina.net/u/559635/blog/389558
http://blog.sina.com.cn/s/blog_872758480100wtfh.html