지금은 그냥 SchedulerFactoryBean을 상속해서 클래스를 만들어 이걸 applicationContext.xml에 등
록해버릴까 고민중입니다. 이런 경우는 흔할것 같은데요. 어떻게들 하시나요??
별도의 daemon에서 단순 스케쥴에 따른 실행만을 한다면 crontab에 등록을 하는 것도 고려해볼만합니다.
전에 정리해둔 내용이 있는데, 공유해드립니다.
많은 분들이 Quartz와 Crontab 사이에서 고민을 하고 계신 것으로 알고 있고, 그런 질문을 많이 받아왔습니다. 아래와 같이 여러 방식의 장단점을 정리해봤습니다.
l Crontab에서 쉘스크립트를 통해서 job을 실행하는 클래스를 호출하는 방식
n 장점
u 소스 수정 배포 후 서버 재시작 등의 작업이 필요 없다.
u 권한이 있는 사람만 서버에 들어가서 쉘을 실행할 수 있으니 보안 문제가 적다.
n 단점
u 웹Application 과는 다른 패키징(jar파일로 패키징)을 하고 실행할 shell 스크립트를 만들어야 한다. (http://www.ksug.org/96 참조)
u 매번 job은 다른 JVM에서 실행되므로
l 자주 실행되는 Job이라면 로딩시간만큼의 실행시간의 손해가 있음
l Job 간의 메모리를 통한 정보공유는 할 수 없다.
l Web container안에서 Quartz를 통해 Job을 호출하는 방식
n 장점
u Job실행 때 로딩시간을 단축할 수 있다.
u 스케줄 정보를 Application 내부에 저장해 둠으로써 소스만 보고 확인해 볼 수 있고, SVN을 통한 이력관리 등의 장점이 있다.
u 웹을 통해 수동으로 Job을 실행할 때 같은 JVM안에 있으므로 간단한 클래스 호출만으로 가능하다.
n 단점
u 배포 후 서버 재시작 등 필요
u 배치 모듈이 아닌 다른 Web 모듈과 함께 올라간다면 배포나 실행 시에 상호영향을 받는다.
u 배치 Job내에서 static 영역에 가지고 있으면서 자원해제를 하지 않는 객체가 있다면 메모리 full 가능성 위험
l MapJobRepository의 사용시 주의 (명시적으로 clear를 하지 않으면 메모리가 언젠가 넘침)
l 배치 모듈을 웹컨테이너올려 넣고, 그 모듈을 URL로 호출하는 쉘스크립트를 만들어서 Crontab에 올리는 방식
n 주로 Quartz방식의 장,단점과 유사.
n 호출하는 URL이 외부에 열려있지 않은지 주의해야 함
해당 Application의 Job의 성격을 보고 몇 분 주기 등 자주 실행되는 Job이 다수라면 Quartz를, 실행 주기와 실행시간이 긴 Job이 많을수록 별도의 JVM으로 띄울 수 있는 Crontab + 클래스 별도 실행이 유리하게 느껴집니다. 이 두 가지 유형이 모두 섞인 어플리케이션인 경우에는 메모리 등 자원관리와 배포에 특별히 유의하면서 Quartz를 써야 하지 않나 생각됩니다.
어느 정도 배치처리를 많이 하시는 팀에서는 배치만을 위해서 별도의 Tomcat을 띄우셔서 다른 웹모듈과의 영향 관계는 없이 관리하시는 것으로 알고 있습니다. 다만 그렇게 하더라도 하나의 서버에 여러 개의 업무영역의 배치가 올라가면 그 모든 Job들의 실행주기와 처리시간을 다 고려해서 배포시간을 결정해야 됩니다. 규모가 커질수록 한 사람이 모든 배치처리의 정보를 머리 속에 다 담고 있기가 힘드니 관리가 힘들어질 수 있습니다.
2009/11/2 Sanghyuk Jung <ben...@gmail.com>:
--
email: anar...@gmail.com
blog: http://anarcher.appspot.com/
2009/11/3 Myoungsoo Shin <anar...@gmail.com>: