java Quartz 타이머 작업과 Spring task 타이밍의 몇 가지 실현 방법

11619 단어 javaquartztaskspring
분류
실현된 기술로 분류하면 현재 주로 세 가지 기술(또는 세 가지 제품이 있다)이 있다.
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 중 자바에서 상속해야 합니다.util.TimerTask.
2. 작업 클래스는 일반적인 자바 클래스로 그 어떠한 기본 클래스에서도 계승할 필요가 없다.
주: 개인적으로 두 번째 방식을 추천합니다. 그렇기 때문에 종류는 모두 일반류이기 때문에 사전에 구별할 필요가 없습니다.
작업 스케줄링의 트리거 타이밍으로 나눌 수 있는데 이것은 주로 작업에 사용되는 트리거로 주로 다음과 같은 두 가지가 있다.
1. 지정된 시간마다 한 번씩 터치합니다. Quartz에 대응하는 트리거는 다음과 같습니다. org.springframework.scheduling.quartz.SimpleTriggerBean
2. 지정된 시간에 한 번씩 터치합니다. Quartz에 대응하는 스케줄러는 org입니다.springframework.scheduling.quartz.CronTriggerBean
주: 모든 임무가 이 두 가지 트리거, 예를 들어java를 사용할 수 있는 것은 아니다.util.TimerTask 작업은 첫 번째 작업에만 사용할 수 있습니다.Quartz와springtask는 이 두 가지 트리거 조건을 지원할 수 있습니다.
2. 용법 설명
Quartz와springtask 두 가지를 포함한 모든 작업 스케줄링 도구의 사용 방식을 상세히 소개합니다.
Quartz
첫 번째, 작업 클래스는 특정한 기류에서 계승된다: org.springframework.scheduling.quartz.QuartzJobBean.
1단계: 작업 클래스 정의

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(" …");
}
}

2단계:spring 프로필에서 작업 클래스 구성 JobDetailBean

<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 속성은 우리가 자바 코드에서 정의한 작업 클래스이고 jobDataAsMap 속성은 이 작업 클래스에 주입해야 하는 속성 값입니다.
3단계: 작업 스케줄링의 트리거 설정 (트리거)
Quartz의 작업 트리거는 두 가지가 있는데, 각각
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
첫 번째 Simple TriggerBean은 30분 간격으로 작업을 일정한 주파수로만 호출할 수 있습니다.
구성 방법은 다음과 같습니다.

<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>
두 번째 Cron Trigger Bean은 매일 12시에 한 번 운행하는 등 지정된 시간에 한 번 운행할 수 있습니다.
구성 방법은 다음과 같습니다.

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="job1" />
<!― 12:00  -->
<property name="cronExpression" value="0 0 12 * * ?" />
</bean>
4단계: 스케줄링 공장 배치

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
설명: 이 매개 변수는 이전에 설정된 트리거의 이름을 지정합니다.
다섯 번째 단계: 응용 프로그램을 시작하면 프로젝트를tomcat이나 다른 용기에 배치할 수 있습니다.
둘째, 작업류는 특정한 기류를 계승하지 않는다.
Spring은 다음과 같은 두 가지 유형으로 이러한 방식을 지원합니다.

org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
이 두 종류는spring이 지원하는 두 가지 임무 스케줄링 방식, 즉 앞에서 언급한 자바 자체의timertask방식과Quartz방식에 대응한다.여기에서 저는 Method Invoking Job Detail Factory Bean의 용법만 썼습니다. 이 종류를 사용하는 장점은 우리의 임무 종류는 더 이상 어떤 종류에서 계승할 필요가 없고 일반적인 포조입니다.
1단계: 작업 클래스 작성

public class Job2 {
public void doJob2() {
System.out.println(" QuartzJobBean - ...");
}
}
이것이 바로 일반적인 종류이고 방법이 있다는 것을 알 수 있다.
2단계: 작업 클래스 구성

<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>
설명: 이 단계는 관건적인 단계입니다. Method Invoking JobDetail Factory Bean을 설명하는데 두 가지 관건적인 속성이 있습니다. target Object는 작업 클래스를 지정하고 target Method는 실행 방법을 지정합니다.아래의 절차는 방법과 같다. 완전하기 위해 똑같이 붙인다.
3단계: 작업 스케줄링의 트리거 설정 (트리거)
Quartz의 작업 트리거는 두 가지가 있는데, 각각

org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean
첫 번째 Simple TriggerBean은 30분 간격으로 작업을 일정한 주파수로만 호출할 수 있습니다.
구성 방법은 다음과 같습니다.

<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>
두 번째 Cron Trigger Bean은 매일 12시에 한 번 운행하는 등 지정된 시간에 한 번 운행할 수 있습니다.
구성 방법은 다음과 같습니다.

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="job2" />
<!― 12:00  -->
<property name="cronExpression" value="0 0 12 * * ?" />
</bean>
상기 두 가지 스케줄링 방식은 실제 상황에 따라 하나를 선택하면 된다.
4단계: 스케줄링 공장 배치

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
설명: 이 매개 변수는 이전에 설정된 트리거의 이름을 지정합니다.
다섯 번째 단계: 응용 프로그램을 시작하면 프로젝트를tomcat이나 다른 용기에 배치할 수 있습니다. 
여기서spring에서 Quartz의 기본 설정을 소개했습니다. 물론 사용하기 전에 해당하는 스프링의 가방과 Quartz의 가방을 가져오는 것은 더 이상 말할 필요가 없습니다.
사실 Quartz의 설정이 보기에는 매우 복잡해 보인다. 어쩔 수 없다. 왜냐하면 Quartz는 사실 중량급 도구이기 때문이다. 만약에 우리가 간단하게 몇 가지 간단한 시간 임무를 수행하고 싶다면 더 간단한 도구가 있습니까? 
Spring-Task
본고는 Spring3.0 이후 자체 개발한 시간 작업 도구를 소개합니다.spring task는 경량급의 Quartz에 비유할 수 있으며 사용하기가 간단합니다.spring 관련 패키지 외에 추가 패키지가 필요하지 않으며 주석과 프로필 두 가지를 지원합니다
형식, 다음은 이 두 가지 방식을 각각 소개할 것이다.
첫 번째: 파일 구성 방법
1단계: 작업 클래스 작성
즉, 다음과 같은 일반적인 Pojo입니다.

import org.springframework.stereotype.Service;
@Service
public class TaskJob {
 
 public void job1() {
  System.out.println(“ 。。。”);
 }
}

2단계:spring 프로필 헤더에 이름 공간 및 설명 추가

<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">
3단계:spring 프로필에 구체적인 작업 설정

 <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 표현식은 구체적으로 설명하지 않겠습니다. 자세한 내용은 위의 문장 부록을 보십시오.
이 설정은 더 이상 말할 필요가 없습니다.spring 스캐닝 주석용입니다.
여기까지만 배치하면 완성됩니다. 아주 간단하지 않습니까?
두 번째: 메모 형식 사용
작업 클래스를 쓸 때마다 xml 파일에 설정하고 싶지 않을 수도 있습니다. 주해 @Scheduled를 사용할 수 있습니다. 원본 파일에서 이 주해의 정의를 보겠습니다.

@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: 공식 문서 설명: 이전 작업의 완료 시간에서 간격을 측정하는 간격 기반 트리거입니다.The time unit value is measured in milliseconds.즉, 이전 작업의 완료 시점부터 다음 작업의 시작 시점까지의 간격을 나타냅니다. 단위는 밀리초입니다.
fixedRate: 공식 문서 설명: 이전 작업의 시작 시간부터 간격을 측정하는 간격 기반 트리거입니다.The time unit value is measured in milliseconds.즉, 이전 작업에서 다음 작업으로 시작하는 간격입니다. 단위는 밀리초입니다.
다음은 제가 설정할게요.
1단계: 포조 작성

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(“ 。。。”);
 }
}

2단계: task 관련 구성을 추가합니다.

<?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"/>

설명: 이론적으로 이 설정만 추가하면 됩니다. 이 매개 변수들은 필수가 아닙니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기