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

本文介绍如何使用 Spring Task 进行定时任务配置。通过示例展示了如何使用 MethodInvokingJobDetailFactoryBean 和 SimpleTriggerBean 实现定时任务。此外还介绍了如何利用 Spring-Task 的简化方式进行定时任务设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于文章: 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个声明

113146_UNlY_1995134.png

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类

115652_l9Nu_1995134.png

 

好了定时执行完成;

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触发 

转载于:https://my.oschina.net/java1314/blog/810718

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值