關於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觸發 

相關文章
相關標籤/搜索