Как создать bean-компонент служб-исполнителей в Spring с помощью XML

Мне нужно создать bean-компонент ScheduledThreadPoolExecutor в файле конфигурации Spring, написанном на XML. В Java я бы написал это как

@Bean(name = "MyThreadPoolList")
    public List<ScheduledThreadPoolExecutor> executorList() {
        List<ScheduledThreadPoolExecutor> executor = new ArrayList<>();
        ScheduledThreadPoolExecutor tempExecutor;
        for (int i = 0; i< 3; i++ ){
            tempExecutor = new ScheduledThreadPoolExecutor(
                    1,
                    NamingThreadFactory.createWithDaemon("ExecutorPool-"+i+"-Thread-%d", true));
            tempExecutor.prestartAllCoreThreads();
            executor.add(i, tempExecutor);
        }
        return Collections.unmodifiableList(executor);
    }

Но я не знаю, как лучше всего добиться этого в XML. Я могу попробовать что-то вроде следующего:

<bean id = "MyThreadPoolList" class = "java.util.ArrayList">
    <constructor-arg>
        <list>
            <bean class = "java.util.concurrent.ScheduledThreadPoolExecutor" init-method = "prestartAllCoreThreads">
                 <constructor-arg value = "1"/>
                 <constructor-arg>
                     <bean class = "my.factory.NamingThreadFactory" factory-method = "createWithDaemon">
                           <constructor-arg value = "ExecutorPool-0-Thread-%d"/>
                           <constructor-arg type = "boolean" value = "true"/>
                     </bean>
                </constructor-arg>
            </bean>
            <bean class = "java.util.concurrent.ScheduledThreadPoolExecutor" init-method = "prestartAllCoreThreads">
                 <constructor-arg value = "1"/>
                 <constructor-arg>
                     <bean class = "my.factory.NamingThreadFactory" factory-method = "createWithDaemon">
                           <constructor-arg value = "ExecutorPool-1-Thread-%d"/>
                           <constructor-arg type = "boolean" value = "true"/>
                     </bean>
                </constructor-arg>
            </bean>
            <bean class = "java.util.concurrent.ScheduledThreadPoolExecutor" init-method = "prestartAllCoreThreads">
                 <constructor-arg value = "1"/>
                 <constructor-arg>
                     <bean class = "my.factory.NamingThreadFactory" factory-method = "createWithDaemon">
                           <constructor-arg value = "ExecutorPool-2-Thread-%d"/>
                           <constructor-arg type = "boolean" value = "true"/>
                     </bean>
                </constructor-arg>
            </bean>
        </list>
    </constructor-arg>
</bean>

Но вот проблемы:

  1. слишком много повторяющегося кода и
  2. если в будущем я захочу увеличить количество услуг исполнителя до 500, мне придется скопировать это 500 раз.

Есть ли более элегантный способ добиться этого?

Вам не обязательно хранить свой код в файлах конфигурации XML, верно? Даже если вы начнете с конфигурации XML, вы можете переключиться на контекст приложения с поддержкой аннотаций и добавить тег context: component-scan в свой XML-файл - и вы можете сохранить эту часть своей конфигурации, как и в Java. конфиг ...

moilejter 27.11.2018 05:00

Мысль о том, чтобы иметь 500 исполнителей, каждый со своим собственным пулом потоков, звучит подозрительно ...

moilejter 27.11.2018 05:00

Я не уверен, что понимаю ваше предложение. У вас есть какой-нибудь пример? 500 исполнителей, наверное, никогда не потребуются. Максимум, я поднимусь до 10. Прямо сейчас я просто пытаюсь немного улучшить, сделав минимальное количество изменений в кодовой базе. Если мне когда-нибудь придется перейти на 500, код придется отредактировать.

Sonu Mishra 27.11.2018 08:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
592
0

Другие вопросы по теме