1. 程式人生 > >java開發中簡單定時器的實現

java開發中簡單定時器的實現

    今天分享的是由spring註解實現的定時排程任務,非常簡單,快速上手,只需兩步。

    第一步,在spring配置檔案名稱空間中加入:

xmlns:task="http://www.springframework.org/schema/task"
在xsi:schemaLocation 中加入
http://www.springframework.org/schema/task 
		http://www.springframework.org/schema/task/spring-task.xsd
然後在開啟註解驅動下加入(開啟註解驅動記得範圍要包含定時任務排程的處理類)
<task:annotation-driven/>
此處意義是開啟任務排程驅動

     第二步,定義自己的定時任務處理類,比如

@Component
public class TaskDemo {

	@Scheduled(cron = "*/5 * * * * ?")//每五秒執行一次
	public void execute(){
		System.out.println("基於註解配置的spring定時任務!");
	}
}
加 componet註解是讓spring管理我們的這個類,@Sheculed註解就是起作用的地。
      另外還有spring + quartz 的方法實現定時任務排程,此種方法類似,可以自行研究。

下面就加上配置資訊,先看我自己的任務類

public class TaskDemoWithQuartz {

	public void executeWithQuartz(){
		System.out.println("spring+quartz實現定時排程!" + System.currentTimeMillis());
	}
}
接下來是spring的配置檔案
<bean id = "taskDemoWithQuartz" class = "com.fortest.TaskDemoWithQuartz"></bean>
	<bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="taskDemoWithQuartz"/>
		</property>
		<property name="targetMethod">
			<value>executeWithQuartz</value><!--任務類中的方法名-->
		</property>
		<!--將併發設定為false-->
		<property name="concurrent" value="false" />
	</bean>
	<!-- <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
		<property name="jobDetail" ref="myJobDetail" />
		<property name="startDelay" value="1000" />
		<property name="repeatInterval" value="2000" />
	</bean> -->
	<bean id ="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="myJobDetail"></property>
		<property name="cronExpression" value="*/5 * * * * ?"></property>
	</bean>
	
	<!-- 總管理類如果將lazy-init='false'那麼容器啟動就會執行排程程式 -->
	<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" autowire="no">
		<property name="triggers">
			<list>
				<!--作業排程器,list下可加入其他的排程器-->
				<!-- <ref bean="simpleTrigger" /> -->
				<ref bean="cronTrigger"/>
			</list>
		</property>
	</bean>
上面提供了兩個排程器,simpleTrigger和cronTrigger,根據需要自行選擇。

最後提醒一句,以上方法僅適用於單點的定時任務排程,不適用分散式環境。