java開發中簡單定時器的實現
阿新 • • 發佈:2019-02-13
今天分享的是由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的配置檔案
上面提供了兩個排程器,simpleTrigger和cronTrigger,根據需要自行選擇。<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>
最後提醒一句,以上方法僅適用於單點的定時任務排程,不適用分散式環境。