[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.다음 중 하나를 시도하십시오.
다음 중 하나를 시도하십시오.
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 ()는 방아쇠를 반환하기 때문에 뒤에 괄호가 없어야합니다.
from https://stackoverflow.com/questions/21375317/spring-quartz-resheduling-or-updating-the-trigger by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring에서 setAllowedFields () 메소드 사용하기 (0) | 2019.04.30 |
---|---|
[SPRING] JBoss AS 7에서 @WebService 주석 스캐닝을 비활성화하는 방법은 무엇입니까? (0) | 2019.04.30 |
[SPRING] 봄 보안 - 특정 URL 패턴에서 캐시 제어를 제거하는 방법 (0) | 2019.04.30 |
[SPRING] 동기화 된 메소드 또는 spring @transactional? (0) | 2019.04.30 |
[SPRING] Spring Rest-API - 403 금지 된 오류 응답 (0) | 2019.04.30 |