关于spring定时器: 多方式实行任务定时执行

基于文章: 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触发 

相关文章
相关标签/搜索