> Java > java지도 시간 > 본문

자바 타이머의 여러 가지 방법

高洛峰
풀어 주다: 2016-12-16 13:19:06
원래의
1444명이 탐색했습니다.

석영

봄 작업

예약 작업

주석

봄 예약 작업

의 여러 구현 최근 프로젝트 개발 중에 일부 예약된 작업을 수행해야 합니다. 예를 들어 매일 이른 아침에 전날의 로그 정보를 분석해야 합니다. 이번 기회에 예정된 작업을 정리해보았습니다. 프로젝트에서는 스프링 프레임워크를 사용하기 때문에

스프링 프레임워크와 연계하여 소개하겠습니다.

1. 분류

구현 기술 측면에서 현재 크게 3가지 기술(또는 3가지 제품)이 있다.

Java와 함께 제공되는 java.util.Timer 클래스, 이 클래스를 사용하면 java.util.TimerTask 작업을 예약할 수 있습니다. 이 방법을 사용하면 프로그램이 특정 빈도로 실행될 수 있지만 지정된 시간에는 실행되지 않습니다. 일반적으로 덜 사용되므로 이 기사에서는 자세히 소개하지 않습니다.

특정 시간이나 특정 빈도로 프로그램을 실행할 수 있는 상대적으로 강력한 스케줄러인 Quartz를 사용하세요. 구성이 다소 복잡하므로 나중에 자세히 소개하겠습니다.

Spring 3.0 이후에 포함된 태스크들은 가벼운 Quartz라고 볼 수 있고, 나중에 소개할 Quartz에 비해 사용이 훨씬 간편하다.

잡 클래스의 상속 방법은 두 가지 범주로 나눌 수 있습니다.

잡 클래스는 다음과 같은 특정 직업 클래스 기본 클래스에서 상속해야 합니다. Quartz. org.springframework.scheduling.quartz.QuartzJobBean에서 java.util.Timer는 java.util.TimerTask에서 상속해야 합니다.

작업 클래스는 일반 Java 클래스이므로 기본 클래스에서 상속할 필요가 없습니다.

참고: 저는 개인적으로 두 번째 방법을 사용하는 것을 권장합니다. 모든 클래스가 공통 클래스이고 미리 다르게 취급할 필요가 없기 때문입니다.

작업 스케줄링의 트리거 타이밍 중에서 주로 작업에 사용되는 트리거는 크게 두 가지 유형이 있습니다.

지정된 시간마다 한 번씩 트리거됩니다. Quartz의 해당 트리거는 다음과 같습니다. org.springframework.scheduling.quartz.SimpleTriggerBean

Quartz의 해당 트리거는 지정된 시간마다 한 번 트리거됩니다. 스케줄러는 org.springframework.scheduling입니다. .quartz.CronTriggerBean

참고: 모든 작업이 이 두 트리거를 사용할 수 있는 것은 아닙니다. 예를 들어 java.util.TimerTask 작업은 첫 번째 트리거만 사용할 수 있습니다. Quartz와 Spring 작업 모두 이 두 가지 트리거 조건을 지원할 수 있습니다.

2. 사용방법

쿼츠, 스프링 태스크 등 각 태스크 스케줄링 도구의 사용법을 자세히 소개합니다.

Quartz

먼저 작업 클래스는 특정 기본 클래스인 org.springframework.scheduling.quartz.QuartzJobBean에서 상속됩니다.

1단계: 직업 클래스 정의

Java 코드

org.quartz를 가져옵니다. JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.scheduling.quartz.QuartzJobBean;

공용 클래스 Job1은 QuartzJobBean을 확장합니다.

private int timeout;

private static int i = 0

//스케줄링 팩토리가 인스턴스화되면 시간 초과 시간 이후에 스케줄링이 시작됩니다.

public void setTimeout(int timeout) {

this.timeout = timeout;

}

/**

* 예정된 특정 작업

*/

@Override

protected void executionInternal(JobExecutionContext context)

throws JobExecutionException {

System.out.println("예약된 작업 실행...");

}

}

2단계: 스프링 구성 파일

Xml 코드

에서 작업 클래스 JobDetailBean 구성

< ;bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">

.scheduling.quartz .JobDetailBean에는 두 가지 속성이 있습니다. jobClass 속성은 Java 코드에서 정의한 작업 클래스이고, jobDataAsMap 속성은 작업 클래스에 주입해야 하는 속성 값입니다.

3단계: 작업 스케줄링의 트리거 방법(트리거) 구성

Quartz에는 두 가지 유형의 작업 트리거가 있습니다. 즉,

org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean

첫 번째 SimpleTriggerBean은 30분마다 한 번씩 실행되는 등 특정 빈도의 작업 호출만 지원합니다.

설정 방법은 다음과 같습니다.

Xml 코드

>

CronTriggerBean의 두 번째 유형은 매일 12시와 같이 지정된 시간에 한 번 실행을 지원합니다.

구성 방법은

Xml 코드

<속성 이름="cronExpression" value="0 0 12 * * />

cronExpression 표현식 정보 구문은 부록을 참조하세요.

4단계: 스케줄링 팩토리 구성

Xml 코드

<속성 이름="triggers">

설명: 이 매개변수는 이전에 구성된 트리거 이름을 지정합니다. 장치의.

5단계: 애플리케이션을 시작합니다. 즉, 프로젝트를 tomcat이나 다른 컨테이너에 배포합니다.

둘째, Job 클래스는 특정 기본 클래스를 상속하지 않습니다.

Spring은 두 가지 클래스 덕분에 이 접근 방식을 지원할 수 있습니다:

org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

이 두 클래스는 각각 위에서 언급한 Spring에서 지원하는 작업 스케줄링을 구현하는 두 가지 방법에 해당합니다. Java와 함께 제공되는 타이머 작업 메서드 및 Quartz 메서드. 여기서는 MethodInvokingJobDetailFactoryBean의 사용법에 대해서만 씁니다. 이 클래스를 사용하면 작업 클래스가 더 이상 어떤 클래스에서도 상속할 필요가 없으며 일반적인 pojo라는 점입니다.

1단계: 태스크 클래스 작성

Java 코드

public class Job2 {

public void doJob2() {

System.out.println("QuartzJobBean 모드를 상속하지 않습니다. 예약이 진행 중입니다...");

}

}

보시다시피 이것은 일반적인 클래스이며 메소드가 하나 있습니다.

2단계: 작업 클래스 구성

Xml 코드

class=" org .springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

참고: 이 단계는 중요한 단계입니다. MethodInvokingJobDetailFactoryBean에는 두 가지 주요 속성이 있습니다. targetObject는 작업 클래스를 지정하고 targetMethod는 실행할 메서드를 지정합니다. 다음 단계는 방법 1과 동일합니다. 완전성을 위해 해당 단계도 게시됩니다.

3단계: 작업 스케줄링의 트리거 방법(트리거) 구성

Quartz에는 두 가지 유형의 작업 트리거가 있습니다. 즉,

org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean

첫 번째 SimpleTriggerBean은 30분마다 한 번씩 실행되는 등 특정 빈도의 작업 호출만 지원합니다.

구성 방법은 다음과 같습니다.

Xml 코드

CronTriggerBean의 두 번째 유형은 매일 12시에 한 번 실행하는 등 지정된 시간에 한 번 실행을 지원합니다. :00.

구성 방법은 다음과 같습니다.

Xml 코드

>

<속성 이름="triggers">

장치의 이름입니다.

5단계: 애플리케이션을 시작합니다. 즉, 프로젝트를 tomcat이나 다른 컨테이너에 배포합니다.

이제 Spring의 Quartz 기본 구성이 소개되었습니다. 물론, 사용하기 전에 Import를 해야 합니다. 해당 스프링 패키지 Quartz 패키지의 경우 이는 말할 필요도 없습니다.

사실 Quartz의 구성은 꽤 복잡해 보이는데, 사실 Quartz는 몇 가지만 실행하면 되는 무거운 도구이기 때문이다. 간단한 타이밍 작업, 더 간단한 도구가 있습니까? 예!

아래 Spring 작업에 대한 소개를 참조하세요.

Spring-Task

이전 섹션에서는 Spring의 Quartz 사용을 소개했습니다. 이 글에서는 Spring 이후의 자율성을 소개합니다. Spring 3.0 개발된 예약작업 도구인 Spring Task는 경량 Quartz와 비교될 수 ​​있으며, Spring 관련 패키지 외에 추가 패키지가 필요하지 않으며, Annotation과 설정 파일을 모두 지원한다

형태로, 이 두 가지 방법을 아래에서 소개하겠습니다.

첫 번째 방법: 구성 파일 방법

1단계: Job 클래스 작성

즉, 일반 포조는 다음과 같습니다. :

Java 코드

import org.springframework.stereotype.Service

@Service

public class TaskJob { >

public void job1( ) {

System.out.println("작업 진행 중...")

}

}

2단계: spring 구성 파일 헤더

Xml 코드

에 네임스페이스 및 설명 추가

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 구성 파일에서 특정 작업 설정

Xml 코드

;task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>

설명: ref 매개변수는 작업 클래스와 메서드를 지정합니다. 실행해야 하는 메소드, cron 및 cronExpression 표현식은 여기에 소개되지 않습니다. 자세한 내용은 이전 기사의 부록을 참조하세요.

말할 필요도 없이 이 구성은 스프링 스캐닝 주석에 사용됩니다.

여기까지 구성이 완료되었습니다. 아주 간단하지 않나요?

두 번째: 주석 형식을 사용하세요.

작업 클래스를 작성할 때마다 xml 파일에서 구성하고 싶지 않을 수도 있습니다. @Scheduled. 소스 파일에서 주석 정의를 확인하세요.

Java 코드

@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType .ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface 예약됨

{

공개 요약 문자열 cron()

공개 추상 긴fixedDelay()

공개 추상 긴 고정Rate();

이 주석에는 각각 다음을 의미하는 세 가지 메소드 또는 매개변수가 있음을 알 수 있습니다.

cron: cron 표현식 지정

fixedDelay: 공식 문서 설명: 이전 작업 완료 시간부터 간격을 측정하는 간격 기반 트리거입니다. 시간 단위 값은 이전 작업 완료부터 시작까지를 의미합니다. 다음 작업 간격(밀리초)입니다.

fixedRate: 공식 문서 설명: 이전 작업의 시작 시간부터 간격을 측정하는 간격 기반 트리거입니다. 시간 단위 값은 밀리초 단위로 측정됩니다. 이전 작업 시작과 다음 작업 시작 사이의 간격(밀리초)입니다.

구성해 보겠습니다.

1단계: pojo 작성

Java 코드

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단계: 작업 관련 구성 추가:

Xml 코드

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/ 작업 http://www.springframework.org/schema/task/spring-task-3.0.xsd"

default-lazy-init="false">

🎜>

참고: 이론적으로는 구성만 추가하면 됩니다. 필요한.

물론, spring 작업에는 아직 많은 매개변수가 있으므로 하나씩 설명하지는 않겠습니다. 자세한 내용은 xsd 문서 http: //www.springframework.org/schema/task/spring-task-3.0.xsd를 참조하세요.

부록:

cronExpression 구성 지침, 특정 사용법 및 매개변수에 대해서는 Baidu Google을 참조하세요

필드 허용값 허용되는 특수문자

초 0~59 , - * /

분 0~59 , - * /

시간 0~23 , - * /

날짜 1~31 , - * ? / L W C

1~12월 또는 1월~12월 , - * /

1~7주 또는 SUN-SAT , - * ? / L C #

연도(선택) 공백, 1970-2099 , - * /

- 범위

* 와일드카드

해당 필드를 설정하고 싶지 않으신가요

다음은 몇 가지 예입니다

CRON 표현 의미

"0 0 12 * * ?" 매일 정오 12시에 트리거됨

"0 15 10 ? * *" 매일 아침 10시 15분에 트리거

"0 15 10 * * ?" 매일 아침 10시 15분에 트리거

"0 15 10 *** >

"0 * 14 * * ?" 매일 오후 2시부터 2시 59분까지 1분마다 트리거됨

"0 0/5 14 * * ?" 매일 오후 2시부터 오후 2시 55분까지 5분마다 트리거됩니다.

"0 0/5 14,18 * * ?" 매일 오후 2시부터 오후 2시 55분까지 매 5분마다 트리거됩니다. 6시부터 6시 55분까지 두 시간 동안 5분

"0 0-5 14 * * ?" 매일 14시부터 14시 5분까지 1분에 한 번씩 트리거

"0 10,44 14 ? 3 WED" 트리거 매주 수요일 3월 14시 10분과 14시 44분

" 0 15 10 ? * MON-FRI" 매주 월요일, 화요일, 수요일, 목요일, 금요일 10:15에 발생


Java 타이머 메소드에 관한 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿