基于文章: http://gong1208.iteye.com/blog/1773177
第二种 方式
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,我们的任务类不再需要继承自任何类,而是普通的pojo。
<!-- 定时器 - 定时发送催款消息任务配置 -->
<!-- 配置类方法id -->
<bean id="messageQuartz" class="org.springframework.scheduling.quartz
.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<!-- targetObject指定任务类 -->
<bean class="com.tsou.jar.product.task.SendMessageController" />
</property>
<property name="targetMethod" value="sendMessage" />
<property name="concurrent" value="false" /><!-- 作业不并发调度 -->
<!-- 第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。 -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="messageQuartz" />
<property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
<property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 -->
</bean>
<!-- 第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="messageQuartz" />
<!-- 每天12:00运行一次 -->
<property name="cronExpression" value="0 0 11 * * ?" />
</bean>
<!-- 配置调度工程执行代码 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
但我这里不使用以上方法,而是采用更简单的Spring-Task ;
Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。
准备 springXML文件中需添加以上2个声明
1.编写执行代码类
注意@Service 写法, 在xml中,ref注入相对应的javaService名
@Service
public class SendMessageService {
Logger log = Logger.getLogger(SendMessageService.class);
public void sendMessage() {
log.info("不继承QuartzJobBean方式-调度进行中...");
}
}
2.xml配置
注意base-package是扫描的包,ref是service名,method则是方法;多个则写多个task-scheduled
<context:component-scan base-package="com.tsou.jar.product.task" />
<task:scheduled-tasks>
<!-- 发送消息——每天2分钟执行一次方法 -->
<task:scheduled ref="sendMessageService" method="sendMessage" cron="0 0/2 * * * ?"/>
</task:scheduled-tasks>
3.java类
好了定时执行完成;
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" 每个周一、周二、周三、周四、周五的10:15触发