Spring 통합 Quartz 동적 타이머 구현 예시 코드
spring 3.1 이하 버 전 은 quartz1.x 시 리 즈 를 사용 해 야 합 니 다.3.1 이상 버 전 은 quartz 2.x 를 지원 합 니 다.그렇지 않 으 면 오류 가 발생 할 수 있 습 니 다.
원인:spring 이 quartz 에 대한 지원 이 실현 되 었 습 니 다.org.spring from work.scheduling.quartz.CronTriggerBean 은 org.quartz.CronTrigger 를 계 승 했 습 니 다.quartz 1.x 시리즈 에서 org.quartz.CronTrigger 는 클래스 이 고,quartz 2.x 시리즈 에서 org.quartz.CronTrigger 는 인터페이스 가 되 어 spring 방식 으로 quartz 의 트리거(trigger)를 설정 할 수 없 게 되 었 습 니 다.
이 예제 에서 선택 한 버 전:spring 버 전 번호 3.0.7.RELEASE,quartz 버 전 1.8.6
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>
<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>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
3.통합 실현1.spring 설정
spring 은 quartz 스케줄 링 공장 bean 만 추가 하면 됩 니 다.
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" />
2.타이머 작업 유형 실현타이머 작업 클래스 를 정의 합 니 다.이 클래스 는 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
*
* @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()) + "★★★★★★★★★★★");
}
}
타이머 관리 클래스 정의
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);
}
}
}
테스트 코드,여기 Scheduler Factory 는 spring 에서 설정 한 bean 을 사용 하지 않 고 new 에서 나 왔 습 니 다.테스트 용 으로 사용 합 니 다.
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:
*
* @ClassName: QuartzTest.java
*/
public class QuartzTest {
@Test
public void quartz() {
try {
SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
Scheduler sche = gSchedulerFactory.getScheduler();
String job_name = " ";
System.out.println("【 】 ( 1 )...");
QuartzManager.addJob(sche, job_name, QuartzJobExample.class, "0/1 * * * * ?");
Thread.sleep(3000);
System.out.println("【 】 ( 2 )...");
QuartzManager.modifyJobTime(sche, job_name, "10/2 * * * * ?");
Thread.sleep(4000);
System.out.println("【 】 ...");
QuartzManager.removeJob(sche, job_name);
System.out.println("【 】 ");
System.out.println("【 】 ( 10 )...");
QuartzManager.addJob(sche, job_name, QuartzJobExample.class, "*/10 * * * * ?");
Thread.sleep(30000);
System.out.println("【 】 ...");
QuartzManager.removeJob(sche, job_name);
System.out.println("【 】 ");
} catch (Exception e) {
e.printStackTrace();
}
}
}
결과 보이 기:spring Control 계층 코드 에서 타이머 관리 실현
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring 통합 Quartz의 간단한 구성 방법그러나 실제 업무에서 직접 그것을 사용하는 것은 매우 드물다.일반적으로spring-quartz 구성 요소를 사용하며, 직접 설정을 통해spring 프레임워크를 자동으로 조립합니다 다음은spring 프레임워크 통합qu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.