最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)器的示例代碼

 更新時(shí)間:2017年01月19日 10:29:05   作者:五指少年  
本篇文章主要介紹了Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)器的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

一、版本說(shuō)明

spring3.1以下的版本必須使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然會(huì)出錯(cuò)。

原因:spring對(duì)于quartz的支持實(shí)現(xiàn),org.springframework.scheduling.quartz.CronTriggerBean繼承了org.quartz.CronTrigger,在quartz1.x系列中org.quartz.CronTrigger是個(gè)類,而在quartz2.x系列中org.quartz.CronTrigger變成了接口,從而造成無(wú)法用spring的方式配置quartz的觸發(fā)器(trigger)

此示例所選版本:spring版本號(hào)3.0.7.RELEASE,quartz版本1.8.6

二、添加jar包

我的是maven工程,pom.xml相關(guān)配置如下:

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>3.0.7.RELEASE</spring.version>
    <quartz.version>1.8.6</quartz.version>
  </properties>
     <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
      <exclusions>
        <!-- Exclude Commons Logging in favor of SLF4j -->
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency><!--3.0.7沒(méi)這個(gè)包 -->
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
      <type>jar</type>
      <scope>test</scope>
    </dependency>

 <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>${quartz.version}</version>
    </dependency>

三、整合實(shí)現(xiàn)

1、spring配置

spring只需要添加quartz調(diào)度工廠bean就可以了

復(fù)制代碼 代碼如下:

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" />

 2、定時(shí)器工作類實(shí)現(xiàn)

定義定時(shí)器作業(yè)類,該類繼承自job類

package com.ld.nhmz.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * quartz示例定時(shí)器類
 * 
 * @author Administrator
 * 
 */
public class QuartzJobExample implements Job {
  @Override
  public void execute(JobExecutionContext arg0) throws JobExecutionException {
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "★★★★★★★★★★★");
  }
}

定義定時(shí)器管理類

package com.ld.nhmz.quartz;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;

/**
 * Quartz調(diào)度管理器
 * 
 * @author Administrator
 * 
 */
public class QuartzManager {
  private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
  private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";

  /**
   * @Description: 添加一個(gè)定時(shí)任務(wù),使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名
   * 
   * @param sched
   *      調(diào)度器
   * 
   * @param jobName
   *      任務(wù)名
   * @param cls
   *      任務(wù)
   * @param time
   *      時(shí)間設(shè)置,參考quartz說(shuō)明文檔
   * 
   * @Title: QuartzManager.java
   */
  public static void addJob(Scheduler sched, String jobName, @SuppressWarnings("rawtypes") Class cls, String time) {
    try {
      JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任務(wù)名,任務(wù)組,任務(wù)執(zhí)行類
      // 觸發(fā)器
      CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 觸發(fā)器名,觸發(fā)器組
      trigger.setCronExpression(time);// 觸發(fā)器時(shí)間設(shè)定
      sched.scheduleJob(jobDetail, trigger);
      // 啟動(dòng)
      if (!sched.isShutdown()) {
        sched.start();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * @Description: 添加一個(gè)定時(shí)任務(wù)
   * 
   * @param sched
   *      調(diào)度器
   * 
   * @param jobName
   *      任務(wù)名
   * @param jobGroupName
   *      任務(wù)組名
   * @param triggerName
   *      觸發(fā)器名
   * @param triggerGroupName
   *      觸發(fā)器組名
   * @param jobClass
   *      任務(wù)
   * @param time
   *      時(shí)間設(shè)置,參考quartz說(shuō)明文檔
   * 
   * @Title: QuartzManager.java
   */
  public static void addJob(Scheduler sched, String jobName, String jobGroupName, String triggerName, String triggerGroupName, @SuppressWarnings("rawtypes") Class jobClass, String time) {
    try {
      JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任務(wù)名,任務(wù)組,任務(wù)執(zhí)行類
      // 觸發(fā)器
      CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 觸發(fā)器名,觸發(fā)器組
      trigger.setCronExpression(time);// 觸發(fā)器時(shí)間設(shè)定
      sched.scheduleJob(jobDetail, trigger);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * @Description: 修改一個(gè)任務(wù)的觸發(fā)時(shí)間(使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名)
   * 
   * @param sched
   *      調(diào)度器
   * @param jobName
   * @param time
   * 
   * @Title: QuartzManager.java
   */
  @SuppressWarnings("rawtypes")
  public static void modifyJobTime(Scheduler sched, String jobName, String time) {
    try {
      CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName, TRIGGER_GROUP_NAME);
      if (trigger == null) {
        return;
      }
      String oldTime = trigger.getCronExpression();
      if (!oldTime.equalsIgnoreCase(time)) {
        JobDetail jobDetail = sched.getJobDetail(jobName, JOB_GROUP_NAME);
        Class objJobClass = jobDetail.getJobClass();
        removeJob(sched, jobName);
        addJob(sched, jobName, objJobClass, time);
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * @Description: 修改一個(gè)任務(wù)的觸發(fā)時(shí)間
   * 
   * @param sched
   *      調(diào)度器 *
   * @param sched
   *      調(diào)度器
   * @param triggerName
   * @param triggerGroupName
   * @param time
   * 
   * @Title: QuartzManager.java
   */
  public static void modifyJobTime(Scheduler sched, String triggerName, String triggerGroupName, String time) {
    try {
      CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName, triggerGroupName);
      if (trigger == null) {
        return;
      }
      String oldTime = trigger.getCronExpression();
      if (!oldTime.equalsIgnoreCase(time)) {
        CronTrigger ct = (CronTrigger) trigger;
        // 修改時(shí)間
        ct.setCronExpression(time);
        // 重啟觸發(fā)器
        sched.resumeTrigger(triggerName, triggerGroupName);
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * @Description: 移除一個(gè)任務(wù)(使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名)
   * 
   * @param sched
   *      調(diào)度器
   * @param jobName
   * 
   * @Title: QuartzManager.java
   */
  public static void removeJob(Scheduler sched, String jobName) {
    try {
      sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止觸發(fā)器
      sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除觸發(fā)器
      sched.deleteJob(jobName, JOB_GROUP_NAME);// 刪除任務(wù)
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * @Description: 移除一個(gè)任務(wù)
   * 
   * @param sched
   *      調(diào)度器
   * @param jobName
   * @param jobGroupName
   * @param triggerName
   * @param triggerGroupName
   * 
   * @Title: QuartzManager.java
   */
  public static void removeJob(Scheduler sched, String jobName, String jobGroupName, String triggerName, String triggerGroupName) {
    try {
      sched.pauseTrigger(triggerName, triggerGroupName);// 停止觸發(fā)器
      sched.unscheduleJob(triggerName, triggerGroupName);// 移除觸發(fā)器
      sched.deleteJob(jobName, jobGroupName);// 刪除任務(wù)
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * @Description:啟動(dòng)所有定時(shí)任務(wù)
   * 
   * @param sched
   *      調(diào)度器
   * 
   * @Title: QuartzManager.java
   */
  public static void startJobs(Scheduler sched) {
    try {
      sched.start();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * @Description:關(guān)閉所有定時(shí)任務(wù)
   * 
   * 
   * @param sched
   *      調(diào)度器
   * 
   * 
   * @Title: QuartzManager.java
   */
  public static void shutdownJobs(Scheduler sched) {
    try {
      if (!sched.isShutdown()) {
        sched.shutdown();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
}

 測(cè)試代碼,這里SchedulerFactory沒(méi)有使用spring中配置的bean,而是new出來(lái)的,做測(cè)試用

package com.ld.nhmz.quartz.test;

import org.junit.Test;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

import com.ld.nhmz.quartz.QuartzJobExample;
import com.ld.nhmz.quartz.QuartzManager;

/**
 * @Description: 測(cè)試類
 * 
 * @ClassName: QuartzTest.java
 */
public class QuartzTest {
  @Test
  public void quartz() {
    try {
      SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
      Scheduler sche = gSchedulerFactory.getScheduler();
      String job_name = "動(dòng)態(tài)任務(wù)調(diào)度";
      System.out.println("【系統(tǒng)啟動(dòng)】開(kāi)始(每1秒輸出一次)...");
      QuartzManager.addJob(sche, job_name, QuartzJobExample.class, "0/1 * * * * ?");

      Thread.sleep(3000);
      System.out.println("【修改時(shí)間】開(kāi)始(每2秒輸出一次)...");
      QuartzManager.modifyJobTime(sche, job_name, "10/2 * * * * ?");
      Thread.sleep(4000);
      System.out.println("【移除定時(shí)】開(kāi)始...");
      QuartzManager.removeJob(sche, job_name);
      System.out.println("【移除定時(shí)】成功");

      System.out.println("【再次添加定時(shí)任務(wù)】開(kāi)始(每10秒輸出一次)...");
      QuartzManager.addJob(sche, job_name, QuartzJobExample.class, "*/10 * * * * ?");
      Thread.sleep(30000);
      System.out.println("【移除定時(shí)】開(kāi)始...");
      QuartzManager.removeJob(sche, job_name);
      System.out.println("【移除定時(shí)】成功");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

顯示結(jié)果:

 

spring Control層代碼中實(shí)現(xiàn)定時(shí)器管理

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Lucene實(shí)現(xiàn)一個(gè)簡(jiǎn)單的布爾搜索功能

    使用Lucene實(shí)現(xiàn)一個(gè)簡(jiǎn)單的布爾搜索功能

    Lucene是一個(gè)全文搜索框架,而不是應(yīng)用產(chǎn)品。因此它并不像www.baidu.com 或者google Desktop那么拿來(lái)就能用,它只是提供了一種工具讓你能實(shí)現(xiàn)這些產(chǎn)品。接下來(lái)通過(guò)本文給大家介紹使用Lucene實(shí)現(xiàn)一個(gè)簡(jiǎn)單的布爾搜索功能
    2017-04-04
  • 面試必問(wèn)項(xiàng)之Set實(shí)現(xiàn)類:TreeSet

    面試必問(wèn)項(xiàng)之Set實(shí)現(xiàn)類:TreeSet

    這篇文章主要介紹了Java TreeSet類的簡(jiǎn)單理解和使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • maven依賴的version聲明控制方式

    maven依賴的version聲明控制方式

    這篇文章主要介紹了maven依賴的version聲明控制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java把數(shù)字格式化為貨幣字符串實(shí)例代碼

    Java把數(shù)字格式化為貨幣字符串實(shí)例代碼

    這篇文章主要介紹了Java把數(shù)字格式化為貨幣字符串實(shí)例代碼,需要的朋友可以參考下
    2014-02-02
  • Maven修改運(yùn)行環(huán)境配置代碼實(shí)例

    Maven修改運(yùn)行環(huán)境配置代碼實(shí)例

    這篇文章主要介紹了Maven修改運(yùn)行環(huán)境配置代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java如何獲取數(shù)組和字符串的長(zhǎng)度(length還是length())

    Java如何獲取數(shù)組和字符串的長(zhǎng)度(length還是length())

    這篇文章主要介紹了Java如何獲取數(shù)組和字符串的長(zhǎng)度(length還是length()),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 基于Spring boot @Value 注解注入屬性值的操作方法

    基于Spring boot @Value 注解注入屬性值的操作方法

    這篇文章主要介紹了結(jié)合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 高并發(fā)下如何避免重復(fù)數(shù)據(jù)產(chǎn)生技巧

    高并發(fā)下如何避免重復(fù)數(shù)據(jù)產(chǎn)生技巧

    這篇文章主要為大家介紹了高并發(fā)下如何避免重復(fù)數(shù)據(jù)的產(chǎn)生技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 解析SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果處理問(wèn)題

    解析SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果處理問(wèn)題

    這篇文章主要介紹了SpringSecurity系列之自定義登錄驗(yàn)證成功與失敗的結(jié)果處理問(wèn)題,本文通過(guò)實(shí)例給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Spring?Cloud?Alibaba使用Nacos作為注冊(cè)中心和配置中心

    Spring?Cloud?Alibaba使用Nacos作為注冊(cè)中心和配置中心

    這篇文章主要為大家介紹了Spring?Cloud?Alibaba使用Nacos作為注冊(cè)中心和配置中心的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論

将乐县| 万州区| 衡阳县| 蓬溪县| 顺平县| 饶河县| 泰顺县| 邻水| 渝中区| 潢川县| 大洼县| 邯郸县| 巴东县| 嘉禾县| 英山县| 会宁县| 滨州市| 九江县| 习水县| 阳高县| 兴义市| 汾西县| 潼南县| 乌鲁木齐县| 虞城县| 萨迦县| 杭锦旗| 阳新县| 西昌市| 巴塘县| 平塘县| 宾川县| 德钦县| 留坝县| 琼结县| 比如县| 金阳县| 百色市| 庆云县| 从江县| 福安市|