Использовать настроенных исполнителей Tomcats в коде приложения? - PullRequest
0 голосов
/ 12 марта 2012

Tomcat (6) позволяет определять пулы потоков в элементе Executor в server.xml.Можно ли использовать такой пул потоков как ExecutorService в коде приложения?Конечно, я могу создавать свои собственные пулы потоков в Servlets / ServletContextListener / Spring / что угодно, но мне кажется более приятным иметь конфигурацию количества потоков и т. Д. В дескрипторе развертывания.

Обновление: моя идеябыло настроить отдельный элемент executor и использовать этот пул потоков только внутри приложения, но не в собственных компонентах tomcats.Таким образом, это, вероятно, не помешает самому коту.

Ответы [ 2 ]

1 голос
/ 25 октября 2017

Почему мы должны бояться, а не использовать исполнителя tomcat?

Это называется исполнителем!не что-то еще.В идеале, после настройки ExecutorService по числу ядер ЦП все программы должны использовать одну и ту же службу executor, если все коды находятся в асинхронном режиме.Учитывая, что не все коды находятся в асинхронном режиме, поэтому используйте гораздо большее число относительно ядер ЦП.В любом случае, нет никакого смысла для каждого компонента использовать свои собственные сервисы-исполнители.

Как часто вы пишете кусок кода с мертвым циклом в нем?

Итак, как из веб-приложения мы можемполучить доступ к исполнителю, используемому контейнером сервлета, такому как tomcat?

Одним из решений должно быть указание настраиваемого исполнителя и замена по умолчанию org.apache.catalina.core.StandardExecutor в server.xml, тогда веб-приложения могут получить к нему доступ даже черезстатическая переменная, так как этот исполнитель настроен.

1 голос
/ 12 марта 2012

Ваш вопрос кажется немного неясным ...

Элемент Executor в файле server.xml определяет поток ThreadPool, который совместно используется компонентами Tomcat , такими как соединители, планировщики и т. Д. (например http соединения).Лучше не добавляйте свои собственные задачи во внутренний ThreadPool серверов, поскольку это может поставить под угрозу стабильность серверов, и вы «жестко подключите» свое приложение к Tomcat xy.

Если вы хотите, чтобы Tomcat управлял вашим собственным пулом потоков число потоков, допустим, у вас есть один кот для разработки и один для рабочего режима с различными размерами основного пула , вы можете настроить параметр контекста на стороне сервера , чтобы сделатьthis:

In server.xml:

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

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

  </host>
</server>

Получите значение в вашем приложении, используя:

getServletContext().getInitParameter("numberOfThreadsOnThisTomcat")

Для получения дополнительной информации посмотрите здесь: http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Context_Parameters

Имейте в виду, что этот параметр может не существовать после автоматического развертывания.

Если вам нужен полный программный контроль над поведением Tomcats, вам лучше использовать Embedded Tomcat и запускать приложение автономно (как это делает Liferay Portal).например).Смотрите здесь: http://tomcat.apache.org/download-70.cgi#7.0.26

...