0

Я хочу выполнить несколько задач асинхронно в веб-приложении. Мой вопрос заключается в том, какую Spring-реализацию исполнителей задач я должен использовать в среде, управляемой контейнером.Асинхронное выполнение задачи с использованием Spring в управляемой контейнером среде

Я ссылался на this глава в документации весны и нашел несколько вариантов.

Один из вариантов, который я рассматривал, - WorkManagerTaskExecutor. Это очень просто и прекрасно работает с сервером IBM Websepher, который я использую сейчас, но это очень специфично для серверов IBM Websphere и Oracle Weblogic. Я не хочу привязывать свой код специально к одной конкретной реализации, так как в некоторых тестовых и локальных регионах мы используем контейнер Jetty &, эта реализация создает проблемы для запуска кода в Jetty.

Другие варианты, такие как SimpleThreadPoolTaskExecutor, по-видимому, не лучше подходит для объединения потоков в среду, управляемую контейнером, и я не хочу самостоятельно создавать новую тему.

Не могли бы вы предложить, как мне это сделать. Любые указатели на примерную реализацию будут большой помощью.

ответ

0

Как обычно, это зависит. Если вы полагаетесь на управление потоками контейнера и хотите иметь возможность устанавливать пулы потоков в своем интерфейсе администратора, или если вы являетесь приложением, это не единственное приложение внутри контейнера или вы используете определенные функции, такие как установка приоритетов пула потоков для EJB или JMS, вы должен добавить поддержку WorkManagerTaskExecutor и сделать ее настраиваемой. Если нет, вы можете использовать все, что хотите, в конце концов, это потоки. Поскольку Spring является контейнером IOC, вы можете это сделать. Чтобы использовать одно и то же приложение везде, я бы не предложил изменить конфигурацию XML для каждой версии приложения. Скорее

  1. использование profiles с configuration, чтобы установить тип исполнителя и внутри Java конфигурации вернуть правильный тип компонента. Если вы используете Jetty, вы должны иметь конфигурацию для размеров пула потоков, чтобы иметь возможность ее настраивать.

  2. spring boot like auto configuration которые обычно полагаются на доступные классы на пути к классам (@ConditionalOnClass). Если WebLogic или WebSphere конкретных классов доступны или любые другие контейнер, конкретные вещи, как ENV переменные, которые вы можете создать WorkManagerTaskExecutor

с обеими из них вы можете развернуть ту же войну везде.