찾다
Javajava지도 시간자바 타이머의 여러 가지 방법

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

Dec 16, 2016 pm 01:19 PM
자바 타이머

석영

봄 작업

예약 작업

주석

봄 예약 작업

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

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

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 표현식 정보 구문은 부록을 참조하세요.

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

Xml 코드

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

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 코드

>

장치의 이름입니다.

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 중국어 웹사이트를 주목하세요!


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
JVM은 Java의 'Write Once, Run Aloneeringly'(Wora) 기능에 어떻게 기여합니까?JVM은 Java의 'Write Once, Run Aloneeringly'(Wora) 기능에 어떻게 기여합니까?May 02, 2025 am 12:25 AM

JVM은 바이트 코드 해석, 플랫폼 독립 API 및 동적 클래스 로딩을 통해 Java의 Wora 기능을 구현합니다. 1. 바이트 코드는 크로스 플랫폼 작동을 보장하기 위해 기계 코드로 해석됩니다. 2. 표준 API 추상 운영 체제 차이; 3. 클래스는 런타임에 동적으로로드되어 일관성을 보장합니다.

최신 버전의 Java는 플랫폼 별 문제를 어떻게 해결합니까?최신 버전의 Java는 플랫폼 별 문제를 어떻게 해결합니까?May 02, 2025 am 12:18 AM

JAVA의 최신 버전은 JVM 최적화, 표준 라이브러리 개선 및 타사 라이브러리 지원을 통해 플랫폼 별 문제를 효과적으로 해결합니다. 1) Java11의 ZGC와 같은 JVM 최적화는 가비지 수집 성능을 향상시킵니다. 2) Java9의 모듈 시스템과 같은 표준 라이브러리 개선은 플랫폼 관련 문제를 줄입니다. 3) 타사 라이브러리는 OpenCV와 같은 플랫폼 최적화 버전을 제공합니다.

JVM이 수행 한 바이트 코드 검증 프로세스를 설명하십시오.JVM이 수행 한 바이트 코드 검증 프로세스를 설명하십시오.May 02, 2025 am 12:18 AM

JVM의 바이트 코드 검증 프로세스에는 네 가지 주요 단계가 포함됩니다. 1) 클래스 파일 형식이 사양을 준수하는지 확인, 2) 바이트 코드 지침의 유효성과 정확성을 확인하고 3) 유형 안전을 보장하기 위해 데이터 흐름 분석을 수행하고 4) 검증의 철저한 성능 균형을 유지합니다. 이러한 단계를 통해 JVM은 안전하고 올바른 바이트 코드 만 실행되도록하여 프로그램의 무결성과 보안을 보호합니다.

플랫폼 독립성은 Java 응용 프로그램의 배포를 어떻게 단순화합니까?플랫폼 독립성은 Java 응용 프로그램의 배포를 어떻게 단순화합니까?May 02, 2025 am 12:15 AM

Java'splatforminccendenceallowsapplicationStorunonAnyAnyOperatingSystemwithajvm.1) SingleCodeBase : writeAndCompileOnceforAllPlatforms.2) EasyUpdates : UpdateByTeCodeForsimultiancodeporsimultiancomeDeployment.3) 시험 효율성 : westernoneplatformforunivor.4) Scalab

Java의 플랫폼 Independence는 시간이 지남에 따라 어떻게 진화 했습니까?Java의 플랫폼 Independence는 시간이 지남에 따라 어떻게 진화 했습니까?May 02, 2025 am 12:12 AM

Java의 플랫폼 Independence는 JVM, JIT 컴파일, 표준화, 제네릭, Lambda 표현 및 ProjectPanama와 같은 기술을 통해 지속적으로 향상됩니다. 1990 년대 이래 Java는 기본 JVM에서 고성능 현대 JVM으로 발전하여 다양한 플랫폼에서 코드의 일관성과 효율성을 보장했습니다.

Java 응용 프로그램에서 플랫폼 별 문제를 완화하기위한 몇 가지 전략은 무엇입니까?Java 응용 프로그램에서 플랫폼 별 문제를 완화하기위한 몇 가지 전략은 무엇입니까?May 01, 2025 am 12:20 AM

Java는 플랫폼 별 문제를 어떻게 완화합니까? Java는 JVM 및 표준 라이브러리를 통해 플랫폼 독립성을 구현합니다. 1) Bytecode 및 JVM을 사용하여 운영 체제 차이를 추상화합니다. 2) 표준 라이브러리는 Paths 클래스 처리 파일 경로 및 Charset 클래스 처리 문자 인코딩과 같은 크로스 플랫폼 API를 제공합니다. 3) 최적화 및 디버깅을 위해 실제 프로젝트에서 구성 파일 및 다중 플랫폼 테스트를 사용하십시오.

Java의 플랫폼 독립성과 마이크로 서비스 아키텍처의 관계는 무엇입니까?Java의 플랫폼 독립성과 마이크로 서비스 아키텍처의 관계는 무엇입니까?May 01, 2025 am 12:16 AM

java'splatformincendenceenhancesmicroservicesarchitectureDeploymentFlexibility, 일관성, 확장 성 및 포트 가능성

Graalvm은 Java의 플랫폼 독립 목표와 어떤 관련이 있습니까?Graalvm은 Java의 플랫폼 독립 목표와 어떤 관련이 있습니까?May 01, 2025 am 12:14 AM

Graalvm은 Java의 플랫폼 독립성을 세 가지 방식으로 향상시킵니다. 1. 교차 언어 상호 운용성, Java는 다른 언어와 원활하게 상호 작용할 수 있습니다. 2. 독립적 인 런타임 환경, Java 프로그램을 GraalvMnativeImage를 통해 로컬 실행 파일로 컴파일합니다. 3. 성능 최적화, Graal Compiler는 Java 프로그램의 성능과 일관성을 향상시키기 위해 효율적인 기계 코드를 생성합니다.

See all articles

핫 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

메모장++7.3.1

메모장++7.3.1

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

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.