2014-09-19 3 views
1

우리 팀은 현재 지속적으로 실행되는 많은 처리 스레드 (대기열에서 폴링 등)를 수행하는 Java 응용 프로그램을 개발 중입니다.Cron Job 대 ScheduledExecutorService를 사용해야하는 경우

이 응용 프로그램과 관련된 일련의 작업이 미리 결정된 기간 (하루에 한 번, 6 시간마다 한 번 등)에 실행되어야합니다. 우리 팀의 일부 구성원은 이러한 작업을 cron을 통해 독립 실행 형 프로세스로 실행하는 것이 가장 좋다고 생각하지만 다른 사람들은 Java의 ScheduledExecutorService를 통해 예약 된 현재 응용 프로그램에 이러한 작업을 포함시키는 것이 더 좋을 것이라고 생각합니다. cron과 내부 ScheduledExecutorService를 사용하는 경우에 대한 우수 사례가 있습니까? 아니면 단순히 환경 설정의 문제입니까?

답변

2

ScheduledExecutorService을 사용하는 이점은 100 % java로 작업한다는 것입니다. 따라서 서버를 업그레이드하거나 어떤 이유로 머신을 변경하려는 경우 cron 작업을 다시 구성 할 필요가 없습니다. 또한 ScheduleExceutorService를 사용하면 Callable을 사용할 수 있으므로 일부 결과를 반환하고 java로 처리 할 수 ​​있습니다.

1

크론을 사용하면 응용 프로그램을 변경하거나 다시 배포하지 않고도 운영 팀이 응용 프로그램을 손쉽게 재 스케줄하거나 일시 중단 할 수 있다는 장점이 있습니다.

단점은 cron 작업이 호출 할 수있는 (REST 서비스와 같은) 응용 프로그램의 인터페이스가 필요하거나 cron이 실행중인 두 번째 VM을 시작한다는 것입니다 (즉, 배치 작업은 대부분 운영 팀 작업입니다). 작업 실행 중 응용 프로그램과 병렬로 실행됩니다.

우리는 현재 Quartz 기반 내부 스케줄링에서 cron/REST 방식으로 이동하고 있습니다.

0

내가 단일 책임 원칙의 측면에 투표 할 것입니다 : 정기적 인 작업 기본 응용 프로그램의 독립적 인 별도의 프로세스로 실행 될 수 있다면, 그들은 별도의 프로세스로 실행해야합니다. 당신이 그것을 하나의 거대한 자루에 던지면, 언젠가는 언젠가 그 결정을 후회할 것이라고 내 돈은 말합니다.