spring定時器(基于xml)
spring定時器(基于注解)
quartz定時器
1、使用基于xml配置的spring定時器
首先編寫定時任務類Mytask
<b>[java]</b> view plain copy
public class Mytask {
public void execute(){
System.out.println("基于xml配置的spring定時任務!");
}
}
接着在spring配置檔案中加入xmlns:task="http://www.springframework.org/schema/task"命名空間
<b>[html]</b> view plain copy
<task:annotation-driven/>
<bean id="mytask" class="com.pptv.vipbackend.controller.Mytask"/>
<task:scheduled-tasks>
<task:scheduled ref="mytask" cron="*/5 * * * * ?" method="print"/><!--每隔5秒執行一次-->
</task:scheduled-tasks>
當然,定時任務類要加入spring的管理中
<context:component-scan base-package="com.simonsfan.study.controller.Mytask">
執行便可看到效果
2、使用基于注解配置的spring定時器
基于注解會相對簡單的多,直接編寫任務類Mytask:
@EnableScheduling
@Component
@Scheduled(cron = "*/5 * * * * ?")
System.out.println("基于注解配置的spring定時任務!");
}
當然,任務類也要納入spring管理
啟動可以看到相同效果
3、quartz定時器,其性能和靈活性都優于jdk的TimerTask類
pom檔案中加入
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.2</version>
</dependency>
定時任務類Mytask:
public void execute() {
System.out.println("基于spring+quartz實作定時任務!");;
spring配置檔案中加入:
<bean id="jobBean" class="com.pptv.vipbackend.controller.Mytask"/>
<bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="jobBean"/>
</property>
<property name="targetMethod">
<value>execute</value><!--任務類中的方法名-->
<!--将并發設定為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" />
<!-- 總管理類如果将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" />
</list>
這樣,基于spring + quartz便可實作定時任務的排程
定時任務中的時間表達式:
順序:
秒
分鐘
小時
日期
月份
星期
年(可選)
取值:
0-59
0-23
1-30(31)
1-12
1-7
允許特殊字元:
, - * /
, - * / ? L W C
, - * / L # C
1970-2099 , - * /
字段含義
*:代表所有可能的值
-:指定範圍
,:列出枚舉 例如在分鐘裡,"5,15"表示5分鐘和20分鐘觸發
/:指定增量 例如在分鐘裡,"3/15"表示從3分鐘開始,沒隔15分鐘執行一次
?:表示沒有具體的值,使用?要注意沖突
L:表示last,例如星期中表示7或SAT,月份中表示最後一天31或30,6L表示這個月倒數第6天,FRIL表示這個月的最後一個星期五
W:隻能用在月份中,表示最接近指定天的工作日
#:隻能用在星期中,表示這個月的第幾個周幾,例如6#3表示這個月的第3個周五
0 * * * * ? 每1分鐘觸發一次
0 0 * * * ? 每天每1小時觸發一次
0 0 10 * * ? 每天10點觸發一次
0 * 14 * * ? 在每天下午2點到下午2:59期間的每1分鐘觸發
0 30 9 1 * ? 每月1号上午9點半
0 15 10 15 * ? 每月15日上午10:15觸發
*/5 * * * * ? 每隔5秒執行一次
0 */1 * * * ? 每隔1分鐘執行一次
0 0 5-15 * * ? 每天5-15點整點觸發
0 0/3 * * * ? 每三分鐘觸發一次