JAVA > Tip&Tech > java.util.Timer 를 사용하여 잡 스케줄링 하기
 
JAVA
Library
Tip&Tech
Q&A
java공식사이트
Java  Platform Standard Edition 6 의 API 스펙
Tip&Tech
  HOME > JAVA > Tip&Tech
 
작성일 : 10-06-07 17:20
java.util.Timer 를 사용하여 잡 스케줄링 하기
 글쓴이 : 덩벙이 (211.♡.155.10)
조회 : 7,413   추천 : 0   비추천 : 0  

java.util.Timer 를 사용하여 잡 스케줄링 하기

java

2010/04/14 12:46

대부분의 어플리케이션 로직은 버튼 클릭과 같이 사용자의 액션 형태에 따라서 반응한다.

 

하지만 하루에 한번 새벽시간에 특정데이터를 추출해서 외부 시스템으로 보낸다든지..

특정시간마다 임시파일을 삭제한다든지 하는 프로세스가 있다면..사용자 액션없이 주어진 주기마다 실행해야 한다.

 

이런 작업은 주요 로직은 아니더라도 시스템 유지보수등에 반드시 필요한 작업중의 하나이다.

 

 

세가지 주요 개념

  • 잡(job) - 특정 주기마다 실행되도록 스케줄링이 필요한 작업 단위를 말한다.
  • 트리거(trigger) - 고정간격이나, 잡을 실행하도록 하는 조건을 말한다.
  • 스케쥴(schedule) - 트리거의 집합으로 잡의 전체 시간표로서 보통은 트리거와 동일한 의미로 사용한다.

 

JDK Timer 기반의 스케줄링은 자바에 포함되어 있고,외부 라이브러리가 필요없으므로 애플리케이션의 크기가 협력정책이

제한적일 경우에 유용하지만 기능이 제한적이다.

(간격기반의 트리거만 제공한다.)

 

좀더 유연한 트리거가 필요한 경우 쿼츠를 사용한다. 쿼츠를 사용하면 매주 월,수,금 오후3시 등과 같은 트리거를

설정할 수 있다.

 

 

타이머 트리거 타입

  • 일회성(OneOff) - 잡의 실행을 주어진 날짜의 밀리초로 정의한 미래의 어느 시점으로 스케줄링 한다.
  • 반복 고정지연 - 처음 실행 후 성공시간을 재설정하여 주어진 간격이후에 실행하도록 다시 스케줄링한다.
  • 반복 고정비율 - 처음 실행시간을 기준으로 주어진 간격 이후에 실행하도록 스케줄링한다.

 

잡스케줄링 예제

[ex :잡(job)]

※ 실행이되면 콘솔에 스트링을 출력하는 잡(job)

    java.util.TimerTask를 상속받아서 run()메소드를 구현하면 된다.

 

import java.util.TimerTask;

public class TestJDKTimer extends TimerTask {

   @Override
   public void run() {
     System.out.println("잡이 실행되었습니다 !!");

   }

}

 

[ex :트리거(trigger)]

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Timer;

 

public class Scheduling {
 public static void main (String[] args){
     Timer t = new Timer();
  
     GregorianCalendar cal = new GregorianCalendar();
     t.schedule(new TestJDKTimer(), 2000);                   //OneOff(딜레이 2초후 1회실행)
  
    cal.set(2010,Calendar.APRIL,14);
    t.schedule(new TestJDKTimer(), cal.getTime());      //OneOff(주어진 시간에 1회 실행)

  

    //고정지연 (2초후 실행하며,마지막 성공 시점부터 지연시간 1초마다 실행)
    t.schedule(new TestJDKTimer(), 2000, 1000);

 

    //고정지연 (주어진 시간에 실행하며,마지막 성공 시점부터 지연시간 1초마다 실행)         
    t.schedule(new TestJDKTimer(), cal.getTime(), 1000);  

    //고정비율 (2초후 실행하며, 최초 실행 시간으로 부터 1초마다 실행함)

    t.scheduleAtFixedRate(new TestJDKTimer(), 2000, 1000);   
 

    // 매년 생일마다 실행 (생일은 4월 14일로 설정)
    long MillisInYear = 365 * 24 * 60 * 60 * 1000;
    t.scheduleAtFixedRate(new TestJDKTimer(),cal.getTime(),MillisInYear );
  
   }

}


 
 

Total 13
번호 제   목 글쓴이 날짜 추천 비추천 조회
13 [안드로이드 스튜디오] 퍼미션 부분 정리 덩벙이 09-08 0 0 122
12 콘솔에서 jar파일 만들기 덩벙이 09-05 0 0 115
11 아두이노(Arduino)와 자바(Java) 통신 RXTX 덩벙이 03-18 0 0 2259
10 진수변환 16진수를 10진수로 10진수를 16진수로 덩벙이 03-18 0 0 1614
9 java.util.Timer 를 사용하여 잡 스케줄링 하기 덩벙이 06-07 0 0 7414
8 JAVA C++참조 덩벙이 05-04 0 0 5372
7 java soap 사용하기 덩벙이 05-03 0 0 5324
6 java socket(소켓) 샘플코드 덩벙이 02-16 0 0 6206
5    java socket(소켓) 샘플코드 덩벙이 06-08 0 0 7536
4 자바관련 추천사이트 덩벙이 12-16 0 0 5149
3 java 인코딩 테스트를 한번에 (한글깨졌을때, 한글깨짐..) 덩벙이 08-19 0 0 13514
2 byte 단위로 문자열자르기1 덩벙이 07-13 0 0 10886
1 byte 단위로 문자열자르기 덩벙이 07-13 0 0 8262
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.