최근에, 멤버 포인트의 시간 계산, 타사 인터페이스 호출 등과 같은 프로젝트에서 예정된 실행 작업을 구현해야합니다. 프로젝트는 Spring 프레임 워크를 사용하기 때문에 스프링 프레임 워크와 함께 여기에 소개됩니다.
숙제 작성
즉, 평범한 pojo는 다음과 같습니다.
패키지 com.pcmall.task; import org.slf4j.logger; import org.slf4j.loggerfactory; public class taska {private static logger = loggerfactory.getLogger (taska.class); public void taska1 () {or (int i = 0; i <100; i ++) {시스템. + i);}} public void taska2 () {for (int i = 0; i <100; i ++) {system.out.println ( "----- a2 ----" + i);}}} 스프링 구성 파일에서 특정 작업을 설정합니다
<? xml 버전 = "1.0"encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance"xsi : schemalocation = "http://www.spramwork.org/schema/schema http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id = "taska"> </bean> <bean id = "taskb"> </bean> <ean> <bean id = "taskjoba1"> <propertion "ref ="taska "> <propertion name ="propertion name = ""targetMethod "" value = "taska1"> </property> <속성 이름 = "동시"value = "false"> </property> </bean> <bean id = "taskjoba2"> <property name = "targetObject"ref = "taska"> </property> <property name = "targetMethod"value = "taska2"> id = "taskJobb1"> <속성 이름 = "targetObject"ref = "tocons"> </property> <속성 이름 = "targetMethod"value = "taskb1"> </property name = "concurrent"value = "false"> </property> </bean> <bean id = "taskjobb2"> 값 = "taskb2"> </property> <속성 이름 = "동시"value = "false"> </property> </bean> <bean id = "taska1trigger"> <property name = "jobDetail"> <Ref Bean = "taskjoba1"/> </property> <속성 이름 = "cronexpression "> 0/1 * *? id = "taska2trigger"> <property name = "jobDetail"> <ref bean = "taskjoba2"/> </property> <property name = "cronexpression"> <value "> 0 0/2 * * *? </value> </value> </bean> <bean id ="taskb1trigger "> 이름 = "cronexpression"> <value> 0 0/1 * * * *? </value> </property> </bean> <bean id = "taskb2trigger"> <property name = "jobDetail"> <ref bean = "taskjobb2"/> </property> <property name = "cronexpression"> <value> 0/2 * *? "org.springframework.scheduling.quartz.quartz.schedulerFactoryBean"> <속성 이름 = "triggers"> <list> <ref bean = "taska1trigger" /> <ref bean = "taska2trigger" /<ref bean = "taskb1trigger" /> <taskb2trigger "< /propertion bean> < /propertion> < /produce bean>
알아채다
방아쇠는 하나의 작업 만 트리거 할 수 있지만 여러 트리거로 작업을 트리거 할 수있어 이번에는 동시성 문제가 발생합니다. 석영에서는 동시에 같은 작업을 동시에 실행하고 싶지 않다면 작업 대신 Statefuljob을 구현할 수 있습니다. 봄에 MethodInVokingJobdetailFactoryBean을 사용하는 경우 Concurrent = "False"속성을 설정하여 수행 할 수 있습니다.
끝 참고
단일 응용 프로그램 대신 봄에 석영을 사용하는 이점은 다음과 같습니다.
모든 작업 일정 설정 설정을 같은 장소에두면 작업을 쉽게 유지할 수 있습니다.
작업 인코딩 만 가능하고 트리거 및 스케줄러는 구성에 따라 설정할 수 있습니다.
Pojo Java Bean을 사용하여 작업 인터페이스를 구현하지 않고 작업을 실행할 수 있습니다.
CRON 표현식의 상세한 사용
필드 허용 값이 허용하는 특수 문자
0-59 초, - * /
0-59, - * /
시간 0-23, - * /
날짜 1-31, - *? / lwc
1-12 개월 또는 Jan-Dec,- * /
1-7 주 또는 Sun-Sat,- *? / LC #
연도 (선택 사항) Blank, 1970-2099, - * /
예:
0/5 * * * *? : 5 초마다 실행합니다
""문자는 모든 값을 지정하는 데 사용됩니다. 예를 들어 : ""는 분야에서 "분당"을 의미합니다.
"?" 캐릭터는 주 날짜와 요일에만 사용됩니다. "비 설명 값"을 지정하는 데 사용됩니다. 이 두 도메인 중 하나로 무언가를 지정해야 할 때 유용합니다. 아래 예를 살펴보면 이해할 것입니다.
달의 날짜와 금주 날짜의 두 요소는 상호 배타적입니다. 해당 필드를 설정하고 싶지 않다는 것을 나타내는 물음표를 설정하십시오.
"-"문자는 범위를 지정하는 데 사용됩니다. 예를 들어 : "10-12"는 "10, 11, 12"를 의미합니다.
","문자는 추가 값을 지정하는 데 사용됩니다. 예를 들면 : "월, 수, 금요일"은 주간 필드에서 "월, 수요일, 금요일"을 의미합니다.
"/"문자는 증분을 지정하는 데 사용됩니다. 예를 들어 : 두 번째 필드에서 "0/15"는 분당 0, 15, 30 및 45 초를 의미합니다. "5/15"는 분 필드에서 시간당 5, 20, 35 및 50을 나타냅니다. ""는 "/"이전 ""(예 :/10)은 "/"(예 : 0/10)와 동일합니다. 하나의 본질을 기억하십시오 : 표현식의 각 숫자 필드는 다음과 같은 최대 및 최소값 세트입니다. 초 및 분 필드 세트는 0-59, 날짜 필드는 1-31이고 월 필드는 1-12입니다. 문자 "/"는 각 문자 필드에서 해당 숫자 값을 얻는 데 도움이됩니다. 예를 들어 : "7/6"은 7 월에 달 도메인이 발생하며 매년 6 월에 유발되지는 않습니다.
L은 달의 날과 주간 분야를 나타낼 수있는 '마지막'에 대한 생략 된 단어이지만, 두 분야에서는 의미가 다릅니다. 예를 들어, 달의 요일 필드는 한 달의 마지막 날을 나타냅니다. 주일의 주일 필드가 '7'또는 'sat'을 의미하는 경우, 수가 주일의 필드가 선행되면 '6L'과 같은 한 달의 마지막 며칠은 한 달의 마지막 금요일을 의미합니다.
문자 "W"는 날짜 필드 만 나타나게합니다. 이 문자는 지정된 날짜의 가장 최근 근무일에 사용됩니다. 예를 들면 : 날짜 필드에 "15W"를 쓰면 이번 달 15 일 에이 달의 가장 최근의 근무일입니다. 따라서 15 일이 토요일이라면 임무는 14 일에 트리거됩니다. 15 세가 더 나은 일요일이면 월요일, 즉 16 일에 작업이 시작됩니다. 날짜 필드에서 "1W"를 채우는 경우, 1st가 토요일이더라도 다음 월요일, 즉 3 번째로 만 작업이 트리거됩니다. "W"문자로 지정된 가장 최근의 근무일은 달을 넘을 수 없습니다. 문자 "W"는 별도의 값으로 만 사용할 수 있으며 다음과 같은 숫자 필드가 될 수 없습니다. 1-15W는 잘못되었습니다.
"L"및 "W"는 날짜 필드에서 공동 방식으로 사용될 수 있으며 LW는 달의 마지막 주 근무일을 나타냅니다.
캐릭터 "#"는 요일 도메인에만 나타날 수 있습니다. 이 캐릭터는 한 달의 특정 날을 지정하는 데 사용됩니다. 예를 들어 : "6#3"은 월 3 주 금요일을 의미합니다 (6은 금요일, 3은 3 주차를 의미합니다). "2#1"는 이달 첫 주 월요일을 의미합니다. "4#5"는 다섯 번째 주 수요일을 의미합니다.
캐릭터 "C"는 날짜와 요일에 나타날 수 있습니다. 이 문자는 지정된 "캘린더"에 의존합니다. 즉,이 표현의 값은 관련 "캘린더"의 계산 결과에 따라 다릅니다. "캘린더"연관성이없는 경우 포함 된 모든 "캘린더"와 같습니다. 예를 들어 : 날짜 필드는 "5C"이며 관련 "캘린더"의 첫날 또는 월 첫날의 마지막 5 일을 나타냅니다. 요일은 "1C"이며, 이는 관련 "캘린더"의 첫날 또는 첫 번째 요일의 다음 날, 즉 일요일 (월요일)의 다음 날을 의미합니다.
표현식
"0 0 12 * *?" 매일 12시 정오에 촉발 된 "0 15 10? * *"매일 오전 10시 15 분에 트리거 됨 "0 15 10 * *?" 매일 오전 10시 15 분에 촉발 된 "0 15 10 * *? *"매일 오전 10시 15 분에 촉발되었습니다. 매일 오전 10시 15 분에 촉발 된 "0/5 14 * *?" 매일 오후 2시 15 분부터 오후 2시 59 분에 촉발 됨 "0/5 14 * *?" 매일 오후 2시 15 분부터 오후 2시 55 분에 시작되었습니다. "0 0/5 14,18 * *?" 매일 오후 2시 15 분부터 오후 2시 55 분까지 매일 5 분에 촉발되었습니다. "0 0/5 14,18 * *?" 0 0-5 14 * *? "0 10,44 14? 3 Wed"0 10 10 10 10 3 월 수요일 매년 매년 오후 2시 10 분과 오후 2시 44 분에 매년 오후 2시 10 분과 오후 2시 44 분에 매년 오후 2:10과 오후 2:44? * Mon-Fri "0 15 10 15 *?" 0 15 10 15 *? "0 15 10 15 10 15 *?" 0 15 15 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 * 6L 2002-2005 "2002 년부터 2005 년까지 매월 마지막 금요일 오전 10시 15 분에 시작되었습니다"0 15 10? * 6#3 "매월 셋째 금요일 오전 10시 15 분에 트리거
위의 기사 Spring은 Quartz를 통합하여 타이밍 작업 스케줄링을 구현하는 것이 내가 공유하는 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.