基于文章: http://gong1208.iteye.com/blog/1773177 java
第二种 方式spring
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean并发
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean.net
这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,咱们的任务类再也不须要继承自任何类,而是普通的pojo。code
<!-- 定时器 - 定时发送催款消息任务配置 --> <!-- 配置类方法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 ;component
Spring3.0之后自带的task,能够将它当作一个轻量级的Quartz,并且使用起来比Quartz简单许多。xml
准备 springXML文件中需添加以上2个声明blog
1.编写执行代码类继承
注意@Service 写法, 在xml中,ref注入相对应的javaService名get
@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" 每一个周1、周2、周3、周4、周五的10:15触发