2012-03-12 2 views
0

Tomcat (6)은 server.xml의 Executor 요소에서 스레드 풀의 정의를 허용합니다. 응용 프로그램 코드 내에서 ExecutorService과 같은 스레드 풀을 사용할 수 있습니까? 물론, Servlets/ServletContextListener/Spring/whatever에 내 스레드 풀을 만들 수는 있지만 배포 설명자에 스레드 수 등을 구성하는 것이 나에게 좋을 것 같습니다.응용 프로그램 코드에서 Tomcat 구성 Executors를 사용 하시겠습니까?

업데이트 : 내 아이디어는 별도의 실행자 요소를 구성하고 응용 프로그램 내에서만이 스레드 풀을 사용하지만 톰캣 자체 구성 요소에서는 사용하지 않는 것이 좋습니다. 이렇게하면 아마도 바람둥이 자체를 방해하지 않을 것입니다.

답변

1

당신의 질문은

가 server.xml의 집행자 요소는 (인스턴스 HTTP 연결) 등 커넥터, 스케줄러처럼 Tomcat의 구성 요소 공유하고 whitch 스레드 풀을 정의 ... 조금 불분명 보인다 . 더 나은 자신의 작업을 서버에 추가하지 마십시오. ThreadPool은 서버 안정성을 손상시킬 수 있으며, 앱을 Tomcat xy에 "연결"합니다.

Tomcat이 당신에게 스레드의 자신의 스레드 풀의 를 제어하려면

당신이 다른 핵심 풀 크기 와 생산 모드에 대해 하나의 의미 론적 메타에 대한 바람둥이와 하나가 말할 수, 당신은 서버 측에서 컨텍스트 매개 변수를 구성 할 수 있습니다이 작업을 수행합니다 : server.xml의

:

<server> 
    ... 
    <host ...> 

    <Context docBase="MyApp" path="/MyApp" reloadable="true"> 
     <Parameter name="numberOfThreadsOnThisTomcat" value="50"/> 
    </Context> 

    </host> 
</server> 

이 값을 검색 사용 App에서 :

http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Context_Parameters

이 매개 변수가 autodeployment 후 존재하지 않을 수도 있음을 유의 사항 : 추가 정보를 위해

getServletContext().getInitParameter("numberOfThreadsOnThisTomcat") 

여기 봐.

Tomcat 동작을 프로그래밍 방식으로 제어하려면 Embedded Tomcat을 사용하고 독립 실행 형 응용 프로그램 (예 : Liferay Portal)을 사용하는 것이 좋습니다. 여기를 참조하십시오 : http://tomcat.apache.org/download-70.cgi#7.0.26

+0

내 생각은 추가 Executor 요소를 구성하고 tomcats 구성 요소에서는 사용하지 않고 백그라운드 작업을 실행하는 응용 프로그램에서만 사용하는 것이 좋습니다.그렇게하면 응용 프로그램이 톰캣의 안정성을 손상시킬 수 없습니까? –

0

왜 우리가 두려워하고 바람둥이 집행자를 사용하지 않아야합니까?

실행자라고합니다! 다른 것이 아닙니다. 이상적으로 ExecutorService가 CPU 코어 수와 함께 구성되면 모든 코드가 비동기 모드 인 경우 모든 프로그램이 동일한 실행 프로그램 서비스를 사용해야합니다. 모든 코드가 비동기 모드에있는 것은 아니므로 CPU 코어에 비해 훨씬 많은 수를 사용하십시오. 어쨌든 모든 구성 요소가 고유 한 실행 프로그램 서비스를 사용할 필요가 없습니다.

얼마나 자주 반복 루프가있는 코드 조각을 작성합니까?

그래서 webapp에서 tomcat과 같은 서블릿 컨테이너에서 사용하는 Executor에 어떻게 액세스합니까?

하나의 솔루션은 맞춤 실행 프로그램을 지정하고 server.xml의 기본 org.apache.catalina.core.StandardExecutor를 바꿔야합니다. 그러면 웹 애플리케이션은이 실행 프로그램을 맞춤 설정했기 때문에 정적 변수를 통해서도 액세스 할 수 있습니다.