Spring:定時任務定時器 Quartz的使用
阿新 • • 發佈:2019-01-04
Quartz的使用方式
配置檔案方式
一、引入依賴
<!-- spring 其他依賴省略 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId >
<version>${spring.version}</version>
</dependency>
<!-- Quartz依賴 -->
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId >quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
二、建立自定義task類
public class MyTask {
//定時任務執行的方法
public void execute() {
System.out.println("當前系統時間:" + new Date().toLocaleString());
}
}
三、配置spring的配置檔案
配置任務類(MyTask)
<!--配置我們自定義的任務類-->
<bean id="myTask" class="top.wintp.crud.task.MyTask"/>
配置任務詳情(jobDetail)
<bean id="jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--配置用到的job示例(目標物件)-->
<property name="targetObject" ref="myTask"/>
<!--job中需要執行的方法(目標方法)-->
<property name="targetMethod" value="execute"></property>
</bean>
配置觸發器
<!--配置觸發器(配置任務執行時間)-->
<bean id="cronTriggerFactoryBean"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--注入任務詳情-->
<property name="jobDetail" ref="jobDetail"/>
<!--設定任務執行的時間(使用cron表示式進行標識) 即通過表示式進行指定任務執行的時間點-->
<property name="cronExpression">
<!--每兩秒執行一次-->
<value>0/2 * * * * ?</value>
</property>
</bean>
配置排程工廠
<!--配置排程工廠-->
<bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTriggerFactoryBean"/>
<!--可以配置多個-->
</list>
</property>
</bean>
配置都是固定的,如果我們新增一個定時任務,僅僅只需要新增一個自定義的task類。新增一個任務詳情(修改執行的方法以及任務類的引用),新增觸發器(修改cron表示式)。將我們新增的觸發器新增到排程工廠的triggers的引用中即可。
cron表示式線上生成網址(百度上有很多,請自行百度)
四、測試類測試是否成功
public class TestMyQuartz {
public static void main(String[] args) {
ApplicationContext context
= new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
核心概念
1、scheduler是一個計劃排程器容器,容器裡面可以盛放眾多的JobDetail和trigger,當容器啟動後,裡面的每個JobDetail都會根據trigger按部就班自動去執行。
2、JobDetail是一個可執行的工作,它本身可能是有狀態的。
3、Trigger觸發器代表一個排程引數的配置,什麼時候去調。
4、當JobDetail和Trigger在scheduler容器上註冊後,形成了裝配好的作業(JobDetail和Trigger所組成的一對兒),就可以伴隨容器啟動而排程執行了。
5、scheduler是個容器,容器中有一個執行緒池,用來並行排程執行每個作業,這樣可以提高容器效率。