2009-10-11 6 views
2

두 가지 구성 요소가있는 Java EE 응용 프로그램이 있습니다. 첫째, 인터넷에서 일부 정보를 긁어 데이터베이스에 채우는 서비스입니다. 두 번째는 사용자가 해당 정보를 볼 수있는 웹 인터페이스 (Tomcat에 배포 됨)입니다.Java EE 응용 프로그램의 스레드

첫 번째 구성 요소를 구현하는 가장 좋은 방법은 무엇일까요? 백그라운드 데몬/서비스 또는 컨테이너 내의 스레드로 실행해야합니까?

답변

8

개인적으로 다른 프로세스로 구분할 것입니다. 다른 것은 제외하고, 다른 것을 걱정하지 않고 다시 시작할 수 있음을 의미합니다. 또한 웹 인터페이스가 실제로 필요하지 않은 서비스를 위해 Tomcat을 무의미하게 설치하지 않고도 다른 시스템에 쉽게 배포 할 수 있음을 의미합니다.

+0

java.util.Timer 및 java.util.TimerTask 클래스를이 용도로 사용할 수 있다고 생각합니까? 감사합니다 – craftsman

+0

내 대답에서 언급 한 스프링 스케줄링 클래스는 Executor와 같은 자바 동시성 객체에 좋은 인터페이스를 제공합니다. Executor는 실제로 여러분이 현대적인 어플리케이션에서 사용해야하는 것입니다. – grkvlt

2

웹 컨테이너 내부에서 백그라운드 작업을 수행하는 데는 아무런 문제가 없지만 제대로 중지하고 시작할 수 있도록 웹 컨테이너에 알려야합니다.

web.xml에서 load-on-startup 태그를 확인하십시오. http://wiki.metawerx.net/wiki/Web.xml.LoadOnStartup

7

응용 프로그램 프레임 워크의 유형에 따라 Spring에서는 Quartz 또는 java.util.concurrent 프레임 워크를 사용할 수 있습니다. Spring은 많은 것을 단순화하는 추상화 (documentation 참조)를 가지고 있지만 디자인에 가장 적합한 것을 확인하기 위해 TaskExecutor 추상화가 있습니다.

Spring 또는 Quartz (Spring에서 관리)는 스레드 또는 실행자 또는 작업의 생성 및 시작/중지와 빈도/기간 및 기타 예약 매개 변수를 제어하고 필요할 수도있는 작업 풀링을 관리합니다.

필자는 문제없이 작성한 모든 Java EE 응용 프로그램에서 모든 백그라운드 작업과 일괄 처리 작업에이 작업을 사용합니다. 작업은 Spring에서 관리하는 POJO이므로 전체 의존성 삽입 프레임 워크에 액세스 할 수 있으므로 Spring이 필요로하는 기능에 액세스 할 수 있으며 필요에 따라 응용 프로그램 구성 XML 파일을 간단히 변경하여 스케줄러 프레임 워크간에 전환 할 수 있습니다. .

+0

석영에서 +1, 많은 j2ee 응용 프로그램에서 백그라운드 프로세스 일정을 계획하는 데 사용했습니다. – broschb

관련 문제