2013-03-19 3 views
0

현재 프로그램 용 서블릿을 개발중인 프로젝트를 진행 중입니다.백그라운드에서 응용 프로그램을 실행하십시오.

이 서블릿은 요청을 수신하지 않고 백그라운드에서 실행하고 10 초마다 실행되기를 원합니다.

나는 이것을 달성하기 위해 Thread.sleep(10000);을 사용하고 있습니다.

이 서블릿을 다른 프로세스가 동시에 실행하는 동안 10 초마다 실행하는 가장 좋은 방법은 무엇입니까?

+0

서블릿을 코딩하는 경우 서블릿 컨테이너에 배포해야합니다. Apache Tomcat은 가장 쉬운 방법 중 하나입니다. 서블릿 컨테이너는 별도의 스레드에서 실행하여 다른 요청을 처리 할 수있게합니다. – jalynn2

+0

@ 한스 한센 서블릿은 무엇을 의미합니까? [http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html] –

+0

나는 그것을 다시 말하고 그냥 프로그램을 말해야한다고 생각한다. 이 파일은 WAR 파일을 통해 배포되는 웹 응용 프로그램입니다. 백그라운드에서 실행하고 db를 쿼리 할 수있는 프로그램을 첨부해야합니다. 프로그램을 올바르게 실행하고 있습니다. 지금 가장 큰 문제는 그것을 서블릿으로 실행한다는 것은 다른 모든 프로세스의 실행을 중지한다는 것입니다. 그러므로 나는 그것이 실제로 서블릿이되어야한다고 생각하지 않고 대신에 다른 것으로 생각됩니다. 어떤 아이디어? –

답변

0

SingleThreadPool을 사용하고 QuartzScheduler를 사용하여 실행할 수 있습니다. 따라서 구성 파일 만 변경하여 실행 빈도를 변경할 수 있습니다.

  1. Scheduling and Thread Pooling
  2. what is Quartz
  3. ... 그리고 a tutorial on Quartz : 귀하의 스레드가 작업을 becames, 당신은 여기에

    이 읽을 수있는 문서 등등, 우선 순위를 지정할 수 있습니다.

0

서블릿을 사용하지 마십시오. 서블릿은 요청에 응답하도록 특별히 설계되었으므로 안정적으로 작동하지 않습니다. 대신 배경 작업을 수행하는 ServletContextInitializer ~ schedule a TimerTask을 사용하십시오.

+0

그러나 이것이 문제가 될 것이라고 나는 믿습니다. 내 프로그램을 실행하기 전에 실제로 모든 파일을로드하려면 WAR가 필요합니다. 더 설명해 드리겠습니다 : 속성 파일이 있습니다. 메서드를 실행하기 위해로드해야하는 시스템이 필요합니다. 메서드를 호출하십시오. 이 파일이 존재하지 않으면 method()는 (전체 WAR가 성공적으로로드 될 때까지 파일이 존재하지 않는다면) 오류를 반환합니다. 왜냐하면 나에게 컨텍스트 리스너의 생성을 지연시킬 수있는 방법이 있는지 궁금합니다. WAR가 배치 되었습니까? –

+0

그러면 속성 파일을로드하는 방식이 잘못되었습니다. 문제를 해결하면 문제가 해결되지 않습니다. 만약 당신이 그것에 대한 방향을 필요로한다면, 나는 다른 SO 질문에 관련 deatils를 줄 것을 제안한다. –

관련 문제