인터넷상의 리소스에서 새 메일을 확인하는 응용 프로그램이 있습니다. 새 메일이있는 경우 메일을 처리합니다. 즉, 메일 양에 따라 처리 시간이 몇 초에서 수 시간 정도 걸릴 수 있습니다.작업 예약, 작업 실행 여부 확인
이제 처리를 수행하는 객체/프로그램은 이미 싱글 톤입니다. 그래서 지금 당장 나는 검사와 처리를 다루는 인스턴스가 실제로 오직 하나만 있다는 것을 이미 알고있었습니다.
그러나 지금은 한 번만 실행하고 있으며 10 분마다 새로운 메일을 적시에 확인하여 지속적으로 실행하고 싶습니다.
나는 이것을 Timer/Timertask로 처리 할 수 있다고 생각한다. 또는 여기에서 자원을 찾은 것이 더 좋다 : http://www.ibm.com/developerworks/java/library/j-schedule/index.html이 Scheduler/SchedulerTask를 사용한다. 하지만 내가 두려워하는 것은 매 10 분마다 실행하도록 설정하고 이전 세션이 이미 데이터를 처리하고 있다면 이전 작업이 완료되면 실행 대기중인 스택에 새 작업을 넣을 것입니다. 그래서 내가 두려워하는 것은 예를 들어 5 시간 동안 실행 된 첫 번째 실행이고, 그 이후로는 계속 바쁘기 때문에 5 * 6-1 = 29가 실행되고 메일과/서버에 휴식을주지 않고 일부 처리를 수행하십시오.
아무도 내가 이것을 해결할 수있는 방법을 알고 있습니까?
P. 내가 지금 내 응용 프로그램을 설정하는 방법은 서버에서 시작된 내 Tomcat 서버에서 자바 서블릿을 사용하여 메인 프로그램의 Singleton 인스턴스를 만든 다음 가져 오기/처리를 수행 할 메소드를 호출하는 것입니다. 그리고 내가 원하는 것은 모든 "x"시간 (10 분 정도)을 가져 오거나/처리하는 것을 반복하는 것입니다. 실제로는 단지 1 개의 인스턴스가이를 수행하고 있으며, 실제로는 10 분마다 실행됩니다.
왜 이벤트 기반 접근 방식을 시도하지 마십시오. 그래서 스케줄러 클래스는 가변적 인 시간이 걸리는 작업을 시작합니다; 이 태스크를 시작하는 동안 프로세스 완료 이벤트를 수신하는 리스너도 등록합니다. 이제 변수 내구성의 메일 처리 작업이 완료되면 스케줄러에 통지됩니다. 스케줄러는 10 분 후에 다른 작업을 트리거하도록 대기열에 넣을 수 있습니다. 또한 불필요한 작업이 작업 대기열에 대기되지 않도록합니다. – Scorpion