복붙노트

[SPRING] 스프링 + 쿼츠가 트리거를 예약하거나 업데이트합니까?

SPRING

스프링 + 쿼츠가 트리거를 예약하거나 업데이트합니까?

나는 Spring 3.2와 Quartz 2.2를 사용하고있다.

내 목표 클래스와 메소드,

public class Producer {

    public void executeListener() {
        System.out.println(" Test Method . ");
    }
}

내 봄 applicationContext.xml,

<bean id="producer" class="com.service.Producer" />

<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="producer" />
  <property name="targetMethod" value="executeListener" />
  <property name="concurrent" value="false" />
</bean>

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
    <property name="jobDetail" ref="jobDetail" />
    <!-- 10 seconds -->
    <property name="startDelay" value="10000" />
    <!-- repeat every 5 seconds -->
    <property name="repeatInterval" value="5000" />
</bean>


<bean id="mySheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
    <list>
        <!-- <ref bean="cronTrigger" /> -->
        <ref bean="simpleTrigger" />
    </list>
    </property>
</bean>

위의 코드가 작동하고 Listener () 메서드 실행이 5 초 간격으로 연속적으로 실행되고 시작 지연은 10 초가됩니다.

나는 스프링 컨트롤러에서 트리거를 업데이트하려고 시도했다.

@Controller
public class SpringController {

    @Autowired
    org.springframework.scheduling.quartz.SchedulerFactoryBean myScheduler;

    @Autowired
    org.springframework.scheduling.quartz.SimpleTriggerFactoryBean oldTrigger;

    @RequestMapping(value="/reSheduleTrigger.html",method=RequestMethod.POST)
    public @ResponseBody String reSheduleTrigger(@RequestParam(value="triggerInSec") String triggerInSec ){

        System.out.println("----------------- Changing the repeat interval request -----------");

        // obtain a builder that would produce the trigger
        TriggerBuilder<SimpleTrigger> tb = oldTrigger.getObject().getTriggerBuilder();   

        Trigger newTrigger = tb.withSchedule(simpleSchedule().withIntervalInSeconds(triggerInSec).build());

        myScheduler.getObject().rescheduleJob(oldTrigger.getObject().getKey(),newTrigger  );

        return "success";
    }
}

그러나 컴파일 시간 오류가 발생했습니다. newTrigger = tb.withSchedule (simpleSchedule (). withIntervalInSeconds (triggerInSec) .build ()); .

나의 필요 :

2 초 간격으로 동적으로 Listener () 실행 메소드를 실행하도록 작업을 다시 스케줄하고 싶습니다.

감사.

해결법

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

    1.다음 중 하나를 시도하십시오.

    다음 중 하나를 시도하십시오.

    Trigger newTrigger = tb.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2)).build();
    

    또는

    Trigger newTrigger = tb.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(2)).build();
    

    둘 다 구문 적으로 유효합니다. newTrigger = tb.withSchedule (simpleSchedule (). withIntervalInSeconds (triggerInSec) .build ())에서 문제가 발생한 것 같습니다. 잘못된 브라케팅으로 인해 발생합니다. 즉, build ()는 방아쇠를 반환하기 때문에 뒤에 괄호가 없어야합니다.

  2. from https://stackoverflow.com/questions/21375317/spring-quartz-resheduling-or-updating-the-trigger by cc-by-sa and MIT license