Java java지도 시간 Spring은 Quartz를 통합하여 동적 타이머 샘플 코드를 구현합니다.

Spring은 Quartz를 통합하여 동적 타이머 샘플 코드를 구현합니다.

Feb 07, 2017 pm 03:12 PM

1. 버전 설명

spring 3.1 이하 버전은 quartz1.x 시리즈를 사용해야 합니다. 3.1 이상 버전만 quartz 2.x를 지원합니다. 그렇지 않으면 오류가 발생합니다.

이유: Spring은 quartz 구현을 지원합니다. org.springframework.scheduling.quartz.CronTriggerBean은 org.quartz.CronTrigger를 상속합니다. quartz1.x 시리즈에서는 org.quartz.CronTrigger가 org입니다. 버전 1.8.6의 .quartz.CronTrigger

2. jar 패키지 추가

광산은 maven 프로젝트이고 관련 pom.xml 구성은 다음과 같습니다.

<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>
로그인 후 복사
rrree

3. 통합 구현

1. Spring 구성

spring에는 Quartz Scheduling Factory Bean만 추가하면 됩니다

 <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没这个包 -->
  <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>
로그인 후 복사

2. 타이머 작업 클래스 구현

타이머 작업 클래스를 정의합니다. 작업 클래스

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" />
로그인 후 복사

에서 상속된 이 클래스는 타이머 관리 클래스

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示例定时器类
 * 
 * @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()) + "★★★★★★★★★★★");
  }
}
로그인 후 복사

테스트 코드를 정의합니다. 여기서 SchedulerFactory는 Spring에 구성된 Bean을 사용하지 않지만 새로운 것입니다. . 테스트하려면

package com.ld.nhmz.quartz;
 
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
 
/**
 * Quartz调度管理器
 * 
 * @author Administrator
 * 
 */
public class QuartzManager {
  private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
  private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
 
  /**
   * @Description: 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
   * 
   * @param sched
   *      调度器
   * 
   * @param jobName
   *      任务名
   * @param cls
   *      任务
   * @param time
   *      时间设置,参考quartz说明文档
   * 
   * @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);// 任务名,任务组,任务执行类
      // 触发器
      CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
      trigger.setCronExpression(time);// 触发器时间设定
      sched.scheduleJob(jobDetail, trigger);
      // 启动
      if (!sched.isShutdown()) {
        sched.start();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 添加一个定时任务
   * 
   * @param sched
   *      调度器
   * 
   * @param jobName
   *      任务名
   * @param jobGroupName
   *      任务组名
   * @param triggerName
   *      触发器名
   * @param triggerGroupName
   *      触发器组名
   * @param jobClass
   *      任务
   * @param time
   *      时间设置,参考quartz说明文档
   * 
   * @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);// 任务名,任务组,任务执行类
      // 触发器
      CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组
      trigger.setCronExpression(time);// 触发器时间设定
      sched.scheduleJob(jobDetail, trigger);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
   * 
   * @param sched
   *      调度器
   * @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: 修改一个任务的触发时间
   * 
   * @param sched
   *      调度器 *
   * @param sched
   *      调度器
   * @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;
        // 修改时间
        ct.setCronExpression(time);
        // 重启触发器
        sched.resumeTrigger(triggerName, triggerGroupName);
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
   * 
   * @param sched
   *      调度器
   * @param jobName
   * 
   * @Title: QuartzManager.java
   */
  public static void removeJob(Scheduler sched, String jobName) {
    try {
      sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器
      sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器
      sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description: 移除一个任务
   * 
   * @param sched
   *      调度器
   * @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);// 停止触发器
      sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器
      sched.deleteJob(jobName, jobGroupName);// 删除任务
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description:启动所有定时任务
   * 
   * @param sched
   *      调度器
   * 
   * @Title: QuartzManager.java
   */
  public static void startJobs(Scheduler sched) {
    try {
      sched.start();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * @Description:关闭所有定时任务
   * 
   * 
   * @param sched
   *      调度器
   * 
   * 
   * @Title: QuartzManager.java
   */
  public static void shutdownJobs(Scheduler sched) {
    try {
      if (!sched.isShutdown()) {
        sched.shutdown();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
}
로그인 후 복사

결과 표시:

Spring은 Quartz를 통합하여 동적 타이머 샘플 코드를 구현합니다.스프링 제어 레이어 코드에서 타이머 관리 구현


위는 다음과 같습니다. 이 기사의 전체 내용을 통해 여러분이 배울 수 있기를 바랍니다. 도움이 되며, 모두가 PHP 중국어 웹사이트를 지지해 주기를 바랍니다.

동적 타이머 샘플 코드를 구현하기 위해 Spring 통합 Quartz에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

OAUTH2.0의 범위 메커니즘을 통해 중첩 된 H5 페이지의 특정 인터페이스에 대한 액세스를 제한하는 방법은 무엇입니까? OAUTH2.0의 범위 메커니즘을 통해 중첩 된 H5 페이지의 특정 인터페이스에 대한 액세스를 제한하는 방법은 무엇입니까? Apr 19, 2025 pm 02:30 PM

인터페이스 액세스 권한을 제어하기 위해 OAuth2.0의 Access_token을 사용하는 방법은 무엇입니까? OAUTH2.0의 적용에서 ...

백엔드 개발에서 서비스 계층과 DAO 계층의 책임을 구별하는 방법은 무엇입니까? 백엔드 개발에서 서비스 계층과 DAO 계층의 책임을 구별하는 방법은 무엇입니까? Apr 19, 2025 pm 01:51 PM

백엔드 개발에서 계층 구조에 대해 논의합니다. 백엔드 개발에서 계층 구조는 일반적으로 컨트롤러, 서비스 및 DAO 3 계층을 포함한 일반적인 설계 패턴입니다.

Java 원격 디버깅에서 원격 서버에서 일정한 값을 올바르게 얻는 방법은 무엇입니까? Java 원격 디버깅에서 원격 서버에서 일정한 값을 올바르게 얻는 방법은 무엇입니까? Apr 19, 2025 pm 01:54 PM

Java 원격 디버깅의 지속적인 획득에 대한 질문과 답변 원격 디버깅에 Java를 사용할 때 많은 개발자가 어려운 현상을 만날 수 있습니다. 그것...

백엔드 개발을 학습 할 때 Java 프로젝트 관리 도구를 선택하는 방법은 무엇입니까? 백엔드 개발을 학습 할 때 Java 프로젝트 관리 도구를 선택하는 방법은 무엇입니까? Apr 19, 2025 pm 02:15 PM

초보자를위한 Java 프로젝트 관리 도구 선택과 혼동됩니다. 백엔드 개발을 배우기 시작한 사람들에게는 올바른 프로젝트 관리 도구를 선택하는 것이 중요합니다 ...

분산 시스템의 궁극적 인 일관성 : 데이터 불일치를 적용하는 방법 및 보상 방법은 무엇입니까? 분산 시스템의 궁극적 인 일관성 : 데이터 불일치를 적용하는 방법 및 보상 방법은 무엇입니까? Apr 19, 2025 pm 02:24 PM

분산 시스템 분산 트랜잭션 처리에서 궁극적 인 일관성의 적용을 탐색하는 것은 분산 시스템 아키텍처에서 항상 문제가되었습니다. 문제를 해결하려면 ...

원사에 pyflink 작업을 제출할 때 오류를보고하는 이유는 무엇입니까? 원사에 pyflink 작업을 제출할 때 오류를보고하는 이유는 무엇입니까? Apr 19, 2025 pm 02:06 PM

원사를 통해 pyflink 작업을 제출하려고 할 때 원사에 pyflink 작업을 제출할 때 Python 스크립트를 찾을 수없는 이유를 분석하면 만날 수 있습니다.

Java에서 프로젝트가 시작될 때 Easypoi에서 @excel 주석의 SavePath 매개 변수를 동적으로 수정하는 방법은 무엇입니까? Java에서 프로젝트가 시작될 때 Easypoi에서 @excel 주석의 SavePath 매개 변수를 동적으로 수정하는 방법은 무엇입니까? Apr 19, 2025 pm 02:09 PM

개발 프로세스 중에 Java의 엔티티 클래스 주석의 매개 변수를 동적으로 구성하는 방법 개발 프로세스 중에는 종종 다른 환경에 따라 주석 매개 변수를 동적으로 구성해야합니다 ...

Tomcat이 Spring-Web 모듈을로드하면 SPI 메커니즘이 실제로 Java 클래스 로더의 가시성 원리를 파괴합니까? Tomcat이 Spring-Web 모듈을로드하면 SPI 메커니즘이 실제로 Java 클래스 로더의 가시성 원리를 파괴합니까? Apr 19, 2025 pm 02:18 PM

Tomcat이 Spring-Web 모듈을로드 할 때 SPI 메커니즘의 클래스 로딩 동작 분석. Tomcat은 Spring-Web 모듈을로드 할 때 Spring-Web에서 제공 한 서블을 발견하고 사용하는 데 사용됩니다 ...

See all articles