Java 웹 프로그램에 타이밍 작업을 추가하면 다음과 같은 두 가지 방법이 있습니다. 1. 리스너 주입 사용; 2. 스프링 주석 @scheduled Injection을 사용하십시오.
두 번째 양식이 권장됩니다.
1. 리스너 주입을 사용하십시오
① : 청취자 수업 만들기 :
import javax.servlet.servletcontextevent; import javax.servlet.servletcontextlistener; public class timerdatatasklistener emperments servletcontextlistener {@override public void contextinitialized (servletcontexteventcontextevent) {new Timermanager (); } @override public void contextDestroyed (servletcontextevent servletcontextevent) {}}② : 시간이 정한 작업 클래스 생성 :
import java.util.calendar; import java.util.date; import java.util.timer; public class timermanager {// 시간 간격 : 24h 개인 정적 최종 긴 기간 = 24 * 60 * 60 * 1000; public timermanager () {calendar calendar = calendar.getInstance (); // calendar.set의 실행을 사용자 정의합니다 (calendar.hour_of_day, 12); calendar.set (calendar.minute, 30); calendar.set (calendar.second, 30); 날짜 = calendar.gettime (); // 시간 작업을 처음 실행하는 시간 // 시간의 시점이 통과 된 경우, 실행은 (date.before (new date ()) {date = this.addday (날짜, 1); } 타이머 타이머 = 새로운 타이머 (); TimertaskService Task = New TimertASKService (); // 지정된 작업이 지정된 시간에 반복 된 고정 지연 실행을 시작하도록 예약하십시오. timer.schedule (작업, 날짜, period_day); } // 개인 날짜 addday (날짜 날짜, int num) {calendar startdt = calendar.getInstance (); startdt.settime (날짜); startdt.add (calendar.day_of_month, num); return startdt.gettime (); }}③ : Timertask 클래스 생성 :
import java.util.timertask; public class timertaskservice는 timertask {@override public void run () {try {// 실행될 작업 논리가 여기에서 작성됩니다. } catch (예외 e) {System.out.println ( "암호 삽입 실패!"); }}}④ : Web.xml에 리스너를 등록하십시오
<!-TIMERDATATASKLISTENER 리스너-> <Leater> <Leater-Class> com.jsiqi.resume.service.timerDatataskListener </Leater-Class> </lartiser>
2. 스프링 주석을 사용하여 주입
내 프로젝트의 프레임 워크는 Spring + SpringMVC + MyBatis입니다.
Code example:
import org.springframework.scheduling.annotation.scheduled; import org.spramframework.stereotyp.component; @componentpublic class timertask {@scheduled (cron = " */30 * * * * *") // 공개 void test () {// 여기에 실행되는 작업을 수행하십시오. System.out.println ( "비밀번호 삽입을 성공적으로 삽입하십시오!"); } catch (예외 e) {System.out.println ( "암호 삽입 실패!"); }}}타이밍 시간 설정은 다음과 같습니다.
Crontrigger 구성 전체 형식은 : [초] [분] [시간] [일] [달] [주] [주] 예 : 0 0 10,14,16 * *? 매일 오전 10시, 오후 2시, 4 : 0 0/30 9-17 * *? 9 ~ 5 근무 시간 동안 0 반 시간 0 0 12? * 수요일 매주 수요일 정오에 "0 0 12 * *?"0 15 10 * *? "10:15 AM 매일 트리거"0 15 10 * *? 2005 "2005 일일 트리거"0 * 14 *? "트리거"0/5 14 * *? "트리거"0/5 14 * *? "트리거"0/5 14,18 *? "트리거"0 0/5 14,18 * *? "트리거"0 0-5 14 *? 3 Wed "Trigger"0 10 및 2:44 PM 매년 3 월 수요일 오전 10시 15 분 월요일부터 금요일까지 오전 10시 15 분에 "0 15 10 15 *?" 월 15 일 오전 10시 15 분 "0 15 10 L *?" 10:15 오전 10시 15 분에 "0 15 10? * 6L"10:15 오전 10시 15 분 "0 15 10? * 6L"오전 10시 15 분 오전 10시 15 분 "0 15 10? * 6L 2002-2005"10:15 AM "0 15 10? * 6#3"10:15 am "10:15 AM
| 일련 번호 | 설명 | 필요합니다 | 허용 값 | 허용 와일드 카드 |
|---|---|---|---|---|
| 1 | 두번째 | 예 | 0-59 | , - * / |
| 2 | 가리키다 | 예 | 0-59 | , - * / |
| 3 | 시간 | 예 | 0-23 | , - * / |
| 4 | 낮 | 예 | 1-31 | , - *? / lw |
| 5 | 달 | 예 | 1-12 또는 Jan-Dec | , - * / |
| 6 | 주 | 예 | 1-7 또는 햇살 | , - *? / lw |
| 7 | 년도 | 아니요 | 빈 또는 1970-2099 | , - * / |
와일드 카드 설명 :
* 모든 값을 의미합니다. 예를 들어 : 부분 필드에서 "*"를 설정하면 매 분이 트리거됩니다.
? 값이 지정되지 않음을 의미합니다. 사용 된 시나리오는 현재 설정된이 필드의 가치에 대해 신경 쓰지 않아도된다는 것입니다.
예를 들어 : 매월 10 일에 작업을 시작해야하지만 주간 날에는 신경 쓰지 않으므로 "?" 0 0 10 *로 설정되어 있습니까?
- 간격을 나타냅니다. 예를 들어, 시간에 "10-12"를 설정하면 10, 11 및 12 포인트가 트리거됩니다.
, 예를 들어 주간 필드에서 "Mon, Wed, Fri"를 설정하는 등 여러 값을 지정하는 것을 의미합니다.
/ 증분 트리거링 용. 두 번째로 "5/15"를 설정하는 경우 5 초부터 시작하여 15 초마다 트리거됩니다 (5,20,35,50). 월 1 일부터 시작하려면 달 필드에서 '1/3'을 설정하고 3 일마다 트리거하십시오.
L은 최종 의미를 의미합니다. 당일 필드 설정에서는 달의 마지막 날을 나타냅니다 (2 월이면 현재 달을 기준으로합니다. 주간 필드에서는 토요일을 나타냅니다. 이는 "7"또는 "SAT"와 동일합니다. 숫자가 "L"가 선행되면 데이터 중 마지막을 의미합니다. 예를 들어, 주간 필드에서 "6L"과 같은 형식을 설정하는 것은 "매월 마지막 금요일"을 의미합니다.
W는 지정된 날짜 (월요일부터 금요일까지)까지 가장 가까운 근무일을 나타냅니다. 예를 들어, 낮에 "15W"를 설정하여 매월 15 일에 가장 가까운 근무일을 나타냅니다. 15 일이 토요일이되면 가장 최근의 금요일 (14 일) 방아쇠를 찾으십시오. 15 일이 매주가 아닌 경우 가장 최근의 월요일 (16 일) 트리거를 찾으십시오. 15 일이 주중 (월요일부터 금요일까지)에 있으면 그 날에 트리거됩니다. 형식이 "1W"로 지정된 경우 매월 1 일 이후 가장 최근의 근무일을 나타냅니다. 첫 번째가 토요일이면 다음 주 월요일에 3 위를 차지합니다. (참고, "w"전에 특정 숫자 만 설정할 수 있으며 간격 "-"허용되지 않습니다).
# 일련 번호 (매월 1 주를 나타냅니다) 예를 들어, 주간 필드에서 "6# 3"을 설정하면 매월 세 번째 토요일을 나타냅니다. "#5"가 지정되면 5 주차에는 토요일이 없으며 구성은 트리거되지 않습니다 (어머니의 날과 아버지의 날에 가장 적합합니다).
팁 :
'l'및 'w'는 조합하여 사용할 수 있습니다. "LW"가 낮 필드에 설정된 경우, 이는 달의 마지막 근무일에 트리거됩니다.
주간 필드의 설정은 영어 편지를 사용하는 경우, 즉 Mon은 Mon과 동일합니다.
참조 :
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216