동적 수정 Spring 타이머
1. 먼저 실행 되 는 클래스 를 실현 합 니 다. 이 클래스 는 타이머 스케줄 링 에 사 용 됩 니 다. 이 클래스 는 어떠한 클래스 나 인 터 페 이 스 를 계승 할 필요 가 없습니다. 코드 는 다음 과 같 습 니 다.
public TestQuartz {
public void doSomething(){
//TODO
}
}
2. spring 프로필, 구체 적 인 설정
<!-- -->
<bean id="testQuarzt" class="test.testQuarzt" />
<!-- testQuarzt job -->
<bean id="testQuartzJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testQuarzt" />
<property name="targetMethod" value="doSomething" />
<property name="concurrent" value="false" />
</bean>
<!-- job -->
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="testQuartzJob" />
<property name="cronExpression">
<value>0 0 6 * * ?<value>
<property>
<bean>
<!-- -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger" />
</list>
</property>
</bean>
이렇게 되면 간단 한 Spring Quartz 타이머 가 완 성 됩 니 다. 이 타 이 머 는 매일 아침 6 시 에 test Quarzt 류 에서 doSomething 방법 을 조정 합 니 다. 왜 아침 6 시 에 마지막 으로 설명 합 니까?
그러나 이 타이머 가 tomcat 에 배치 되 어 있다 고 가정 하면 타이머 의 스케줄 링 시간 을 수정 하려 면 spring 설정 파일 을 수정 하고 tomcat 를 다시 시작 해 야 합 니 다. 사실은 우리 가 tomcat 를 다시 시작 할 조건 이 없 거나 특정한 수요 가 있 으 면 프론트 데스크 에서 스케줄 링 시간 을 직접 수정 해 야 할 때 가 많 습 니 다. 그러면 문제 가 발생 합 니 다.
그러나 우 리 는 세 심하게 관찰 해 보 았 습 니 다. 스케줄 링 시간 은 org. spring from work. scheduling. quartz. ronTriggerBean 과 같은 종류의 cron Expression 속성 이 타이머 의 스케줄 링 시간 을 제어 하고 있 습 니 다. 사실은 spring 은 프로필 을 불 러 올 때 org. spring from work. scheduling. quartz. scheduler Factory Bean 의 대상 을 생 성 할 것 입 니 다.org. springframework. scheduling. quartz. CrontriggerBean 의 대상 을 얻 을 수 있다 면 문 제 는 해결 할 수 있 을 것 같 습 니 다. 사실 우 리 는 이 대상 을 얻 는 것 이 매우 쉽 습 니 다. 이 두 대상 을 우리 의 클래스 에 주입 하기 만 하면 됩 니 다. 그리고 사실은 Scheduler Factory Bean 에서 우리 가 조작 하 는 데 편리 한 방법 을 많이 제공 합 니 다.
다음은 다음 과 같이 수정 할 것 이다.
1. TestQuartz 류 를 수정 하고 코드 는 다음 과 같 습 니 다.
public TestQuartz {
private Scheduler scheduler;
// , setter scheduler
public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}
public void doSomething(){
//TODO
}
public void resetJob(String cronExpression){
// scheduler trigger, , , , bean 。
CronTriggerBean trigger = (CronTriggerBean)scheduler.getTrigger("testTrigger",Scheduler.DEFAULT_GROUP);
String originConExpression = trigger.getCronExpression();
// , , rescheduleJob
if(!originConExpression.equalsIgnoreCase(cronExpression)){
trigger.setCronExpression(cronExpression);
scheduler.rescheduleJob("testTrigger", Scheduler.DEFAULT_GROUP, trigger);
}
}
}
2. spring 프로필 의 수정 은 다음 과 같 습 니 다.
<!-- -->
<bean id="testQuarzt" class="test.testQuarzt">
<property name="scheduler" ref="schedulerFactory" />
</bean>
<!-- testQuarzt job -->
<bean id="testQuartzJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testQuarzt" />
<property name="targetMethod" value="doSomething" />
<property name="concurrent" value="false" />
</bean>
<!-- job -->
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="testQuartzJob" />
<property name="cronExpression">
<value>0 0 6 * * ?<value>
<property>
<bean>
<!-- -->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger" />
</list>
</property>
</bean>
이렇게 되면 이 동적 스케줄 러 가 완 성 됩 니 다. 다음은 다음 스케줄 러 형식 에 대한 문제 입 니 다.
필드 허용 값 허용 되 는 특수 문자 초. 0-59 , - * / 나누다 0-59 , - * / 시간. 0-23 , - * / 날짜. 1-31 , - * ? / L W C 월. 1-12 혹은 JAN-DEC , - * / 요일 1-7 혹은 SUN-SAT , - * ? / L C # 년 (선택 가능) 비우다 1970-2099 , - * /
0 0 12 * * ?---------------매일 낮 12: 00 촉발 0 15 10 ? * *---------------매일 오전 10: 15 촉발 0 15 10 * * ?---------------매일 오전 10: 15 촉발 0 15 10 * * ? *---------------매일 오전 10: 15 촉발 0 15 10 * * ? 2005 년 중 매일 오전 10 시 15 분 에 촉발 0 * 14 * * ?---------------매일 오후 2 시 부터 2 시 59 분 사이 에 1 분 에 한 번 씩 촉발 합 니 다. 0 0/5 14 * * ?---------------매일 오후 2 시 부터 2 시 59 분 사이 에 5 분 마다 한번 촉발 합 니 다. 0 0/5 14,18 * * ?---------------매일 오후 2 시 부터 2 시 59 분, 6 시 부터 6 시 59 분 사이 에 5 분 마다 한 번 씩 촉발 합 니 다. 0 0-5 14 * * ?---------------매일 오후 2 시 부터 2 시 까지 매 분 에 한 번 씩 촉발 합 니 다. 0 10,44 14 ? 3 WED - 3 월 의 수요일 은 오후 2 시 와 2 시 44 분 에 촉발 된다 0 15 10 ? * 월요일 부터 금요일 까지 매일 오전 10: 15 촉발 0 15 10 15 * ?---------------매달 15 일 오전 10: 15 촉발 0 15 10 L * ?---------------매달 마지막 날 오전 10 시 15 분 에 촉발 0 15 10 ? * 매달 마지막 금요일 오전 10: 15 에 촉발 0 15 10 ? * 6L 2002 - 2005 - --- --- 2002, 2003, 2004 and 2005 년 매달 마지막 금요일 오전 10: 15 촉발 0 15 10 ? * 매달 셋째 금요일 오전 10: 15 에 촉발 0 0 12 1/5 * ?---------------매월 첫날 부터 5 일이 지난 낮 12 시 마다 촉발 0 11 11 11 11 ?---------------11 월 11 일 오전 11 시 11 분 마다 촉발.?
참고 자료:
1.http://www.springframework.org Spring 공식 사이트 2.http://www.opensymphony.com/quartz/ Quartz 공식 사이트
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.