복붙노트

[SPRING] 자바 코드에서 작업을 예약하는 방법

SPRING

자바 코드에서 작업을 예약하는 방법

나는 봄 환경에서 작업을 스케줄하는 방법을 안다.

  <task:scheduler id="taskScheduler" pool-size="1" />
  <task:scheduled-tasks scheduler="taskScheduler">
    <task:scheduled ref="jobWatcher" method="run" cron="*/10 * * * * ?" />
  </task:scheduled-tasks>

하지만 내 작업의 cron은 런타임 중에 구성 할 수 있으므로 Java 코드로 작업을 생성해야합니다. 스프링 문서 : http://docs.spring.io/spring/docs/3.0.x/reference/scheduling.html은 다음과 같습니다.

scheduler.schedule(task, new CronTrigger("* 15 9-17 * * MON-FRI"));

이것이 내가 원하는 것이지만이 예제에서 스케줄러를 만드는 방법과 그의 클래스가 무엇인지 전혀 알지 못합니다. 도와주세요

해결법

  1. ==============================

    1.귀하의 링크에서 단 세 단락

    귀하의 링크에서 단 세 단락

    public interface TaskScheduler {
    
        ScheduledFuture schedule(Runnable task, Trigger trigger);
    
        ScheduledFuture schedule(Runnable task, Date startTime);
    
        ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period);
    
        ScheduledFuture scheduleAtFixedRate(Runnable task, long period);
    
        ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay);
    
        ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay);
    
    }
    

    그래서 scheduler.schedule (task, new CronTrigger ( "* 15 9-17 * MON-FRI"));

  2. ==============================

    2.XML 설정이나 주석 설정 (Spring 관리 빈의 메소드를 직접 지정할 수있는)과는 달리, 메소드를 호출 할 자신 만의 Runnable을 생성해야한다.

    XML 설정이나 주석 설정 (Spring 관리 빈의 메소드를 직접 지정할 수있는)과는 달리, 메소드를 호출 할 자신 만의 Runnable을 생성해야한다.

    다음 관리 Bean이 있다고 가정 해보십시오.

    @Component
    public class SchedulingBean{
        public void doSomethingPeriodically(){
        }
    }
    

    동적 cron에서 내부적으로이 메소드를 실행하려면 (적어도) 세 가지 옵션이 있습니다.

    SchedulingBean이 Runnable을 구현하고 run 메소드에서 doSomehtingPeriodically 메소드를 호출하도록합니다.

    @Component
    public class SchedulingBean implements Runnable{
        public void doSomethingPeriodically(){
    }
    @Override
    public void run(){
        doSomethingPeriodically();
        }
    }
    

    관리 대상 Bean에서 메소드를 호출하는 새 (아마 익명) Runnable 인스턴스를 작성하십시오. 봄 컨텍스트에서 해당 빈에 대한 참조를 가져와야하기 때문에 좀 더 까다로울 수 있습니다.

    또는 관리 빈을 사용하지 않고 필요한 기능을 직접 구현하는 새로운 (아마도 익명의) Runnable 인스턴스를 생성하십시오.

    public class SchedulingBean implements Runnable{
        public void doSomethingPeriodically(){
        }
        @Override
        public void run(){
            doSomethingPeriodically();
        }
    }
    

    (누락 된 @Component 참고)

  3. from https://stackoverflow.com/questions/19833279/how-to-schedule-task-in-java-code by cc-by-sa and MIT license