国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java Quartz定時器任務與Spring task定時的幾種實現方法

java Quartz定時器任務與Spring task定時的幾種實現方法

2020-08-18 11:07龍昊雪 Java教程

本篇文章主要介紹了java Quartz定時器任務與Spring task定時的幾種實現方法的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

一.分類

從實現的技術上來分類,目前主要有三種技術(或者說有三種產品):

1.Java自帶的java.util.Timer類,這個類允許你調度一個java.util.TimerTask任務。使用這種方式可以讓你的程序按照某一個頻度執行,但不能在指定時間運行。一般用的較少,這篇文章將不做詳細介紹。

2.使用Quartz,這是一個功能比較強大的的調度器,可以讓你的程序在指定時間執行,也可以按照某一個頻度執行,配置起來稍顯復雜,稍后會詳細介紹。

3.Spring3.0以后自帶的task,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多,稍后會介紹。

從作業類的繼承方式來講,可以分為兩類:

1.作業類需要繼承自特定的作業類基類,如Quartz中需要繼承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要繼承自java.util.TimerTask。

2.作業類即普通的java類,不需要繼承自任何基類。

注:個人推薦使用第二種方式,因為這樣所以的類都是普通類,不需要事先區別對待。

從任務調度的觸發時機來分,這里主要是針對作業使用的觸發器,主要有以下兩種:

1.每隔指定時間則觸發一次,在Quartz中對應的觸發器為:org.springframework.scheduling.quartz.SimpleTriggerBean

2.每到指定時間則觸發一次,在Quartz中對應的調度器為:org.springframework.scheduling.quartz.CronTriggerBean

注:并非每種任務都可以使用這兩種觸發器,如java.util.TimerTask任務就只能使用第一種。Quartz和spring task都可以支持這兩種觸發條件。

二.用法說明

詳細介紹每種任務調度工具的使用方式,包括Quartz和spring task兩種。

Quartz

第一種,作業類繼承自特定的基類:org.springframework.scheduling.quartz.QuartzJobBean。

第一步:定義作業類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class Job1 extends QuartzJobBean {
 
private int timeout;
private static int i = 0;
//調度工廠實例化后,經過timeout時間開始執行調度
public void setTimeout(int timeout) {
this.timeout = timeout;
}
 
/**
* 要調度的具體任務
*/
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
 System.out.println("定時任務執行中…");
}
}

第二步:spring配置文件中配置作業類JobDetailBean

?
1
2
3
4
5
6
7
8
<bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.gy.Job1" />
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="0" />
</map>
</property>
</bean>

說明:org.springframework.scheduling.quartz.JobDetailBean有兩個屬性,jobClass屬性即我們在java代碼中定義的任務類,jobDataAsMap屬性即該任務類中需要注入的屬性值。

第三步:配置作業調度的觸發方式(觸發器)

Quartz的作業觸發器有兩種,分別是

org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean

第一種SimpleTriggerBean,只支持按照一定頻度調用任務,如每隔30分鐘運行一次。

配置方式如下:

?
1
2
3
4
5
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="job1" />
<property name="startDelay" value="0" /><!-- 調度工廠實例化后,經過0秒開始執行調度 -->
<property name="repeatInterval" value="2000" /><!-- 每2秒調度一次 -->
</bean>

第二種CronTriggerBean,支持到指定時間運行一次,如每天12:00運行一次等。

配置方式如下:

?
1
2
3
4
5
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="job1" />
<!—每天12:00運行一次 -->
<property name="cronExpression" value="0 0 12 * * ?" />
</bean>

第四步:配置調度工廠

?
1
2
3
4
5
6
7
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>

說明:該參數指定的就是之前配置的觸發器的名字。

第五步:啟動你的應用即可,即將工程部署至tomcat或其他容器。

第二種,作業類不繼承特定基類。

Spring能夠支持這種方式,歸功于兩個類:

?
1
2
3
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
 
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

這兩個類分別對應spring支持的兩種實現任務調度的方式,即前文提到到java自帶的timer task方式和Quartz方式。這里我只寫MethodInvokingJobDetailFactoryBean的用法,使用該類的好處是,我們的任務類不再需要繼承自任何類,而是普通的pojo。

第一步:編寫任務類

?
1
2
3
4
5
public class Job2 {
public void doJob2() {
System.out.println("不繼承QuartzJobBean方式-調度進行中...");
}
}

可以看出,這就是一個普通的類,并且有一個方法。

第二步:配置作業類

?
1
2
3
4
5
6
7
8
<bean id="job2"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="com.gy.Job2" />
</property>
<property name="targetMethod" value="doJob2" />
<property name="concurrent" value="false" /><!-- 作業不并發調度 -->
</bean>

說明:這一步是關鍵步驟,聲明一個MethodInvokingJobDetailFactoryBean,有兩個關鍵屬性:targetObject指定任務類,targetMethod指定運行的方法。往下的步驟就與方法一相同了,為了完整,同樣貼出。

第三步:配置作業調度的觸發方式(觸發器)

Quartz的作業觸發器有兩種,分別是

?
1
2
3
org.springframework.scheduling.quartz.SimpleTriggerBean
 
org.springframework.scheduling.quartz.CronTriggerBean

第一種SimpleTriggerBean,只支持按照一定頻度調用任務,如每隔30分鐘運行一次。

配置方式如下:

?
1
2
3
4
5
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="job2" />
<property name="startDelay" value="0" /><!-- 調度工廠實例化后,經過0秒開始執行調度 -->
<property name="repeatInterval" value="2000" /><!-- 每2秒調度一次 -->
</bean>

第二種CronTriggerBean,支持到指定時間運行一次,如每天12:00運行一次等。

配置方式如下:

?
1
2
3
4
5
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="job2" />
<!—每天12:00運行一次 -->
<property name="cronExpression" value="0 0 12 * * ?" />
</bean>

以上兩種調度方式根據實際情況,任選一種即可。

第四步:配置調度工廠

?
1
2
3
4
5
6
7
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>

說明:該參數指定的就是之前配置的觸發器的名字。

第五步:啟動你的應用即可,即將工程部署至tomcat或其他容器。 

到此,spring中Quartz的基本配置就介紹完了,當然了,使用之前,要導入相應的spring的包與Quartz的包,這些就不消多說了。

其實可以看出Quartz的配置看上去還是挺復雜的,沒有辦法,因為Quartz其實是個重量級的工具,如果我們只是想簡單的執行幾個簡單的定時任務,有沒有更簡單的工具,有! 

Spring-Task

本文介紹Spring3.0以后自主開發的定時任務工具,spring task,可以將它比作一個輕量級的Quartz,而且使用起來很簡單,除spring相關的包外不需要額外的包,而且支持注解和配置文件兩種

形式,下面將分別介紹這兩種方式。

第一種:配置文件方式

第一步:編寫作業類

即普通的pojo,如下: 

?
1
2
3
4
5
6
7
8
import org.springframework.stereotype.Service;
@Service
public class TaskJob {
 
 public void job1() {
  System.out.println(“任務進行中。。。”);
 }
}

第二步:在spring配置文件頭中添加命名空間及描述

?
1
2
3
4
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:task="http://www.springframework.org/schema/task"
 。。。。。。
 xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

第三步:spring配置文件中設置具體的任務

?
1
2
3
4
5
<task:scheduled-tasks>
  <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>
</task:scheduled-tasks>
 
<context:component-scan base-package=" com.gy.mytask " />

說明:ref參數指定的即任務類,method指定的即需要運行的方法,cron及cronExpression表達式,具體寫法這里不介紹了,詳情見上篇文章附錄。

<context:component-scan base-package="com.gy.mytask" />這個配置不消多說了,spring掃描注解用的。

到這里配置就完成了,是不是很簡單。

第二種:使用注解形式

也許我們不想每寫一個任務類還要在xml文件中配置下,我們可以使用注解@Scheduled,我們看看源文件中該注解的定義: 

?
1
2
3
4
5
6
7
8
9
10
11
@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scheduled
{
 public abstract String cron();
 
 public abstract long fixedDelay();
 
 public abstract long fixedRate();
}

可以看出該注解有三個方法或者叫參數,分別表示的意思是:

cron:指定cron表達式

fixedDelay:官方文檔解釋:An interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示從上一個任務完成開始到下一個任務開始的間隔,單位是毫秒。

fixedRate:官方文檔解釋:An interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即從上一個任務開始到下一個任務開始的間隔,單位是毫秒。

下面我來配置一下。

第一步:編寫pojo

?
1
2
3
4
5
6
7
8
9
10
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
@Component(“taskJob”)
public class TaskJob {
 @Scheduled(cron = "0 0 3 * * ?")
 public void job1() {
  System.out.println(“任務進行中。。。”);
 }
}

第二步:添加task相關的配置: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:task="http://www.springframework.org/schema/task"
 xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  http://www.springframework.org/schema/context
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"
 default-lazy-init="false">
 
 
 <context:annotation-config />
 <!—spring掃描注解的配置 -->
 <context:component-scan base-package="com.gy.mytask" />
 
<!—開啟這個配置,spring才能識別@Scheduled注解 -->
 <task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
 <task:scheduler id="qbScheduler" pool-size="10"/>

說明:理論上只需要加上<task:annotation-driven />這句配置就可以了,這些參數都不是必須的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/chen-lhx/p/5581129.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 午夜视频一区二区三区 | 91超碰在线观看 | 中文字幕成人网 | av官网在线 | 亚洲国产精品久久久久秋霞不卡 | 九九热在线免费视频 | 中文字幕一区二区三区不卡 | 求av网址 | 一区二区三区在线免费播放 | 色综合99 | 日韩精品一区二区在线观看 | 一区二区三区不卡视频 | 精精国产xxxx视频在线 | 亚洲播放 | 亚洲国产精品久久久久婷婷老年 | 欧美视频精品在线 | 成人精品免费视频 | 亚洲国产精品久久久久婷婷老年 | 成人在线视频网站 | 在线一区观看 | 欧美一区二区三区 | 午夜欧美一区二区三区在线播放 | 在线观看免费视频a | 99久久精品免费看国产一区二区三区 | av一区二区三区 | 国产一区久久 | 日韩中文在线视频 | 国产美女精品一区二区三区 | 成人午夜免费视频 | 成人精品久久久 | 中文字幕在线影院 | 国产成人久久精品一区二区三区 | 欧美日韩一区二区视频在线观看 | 久久大陆 | 日本中文字幕在线观看 | 成人中文网 | 91国内外精品自在线播放 | 99re视频 | 久久久成人网 | 自拍偷拍专区 | 日韩一级电影在线 |