Можно ли ввести список бобов с помощью Spring

#java #spring-jms

Вопрос:

Я хотел бы создать список JMS MessageProducer из одного соединения. Каждый из этих производителей должен быть создан из отдельной сессии.

Я бы хотел что-то подобное весной, но, очевидно, это не работает.

 @Bean(destroyMethod = "close")
@Scope("prototype")
public Session jmsSession(final Connection jmsConnection) {
    <create a session>
}


@Bean(destroyMethod = "close")
public List<MessageProducer> jmsProvider(List<Session> jmsSessionList) {
    <Create a list of MessageProducers from the list of jmsSessionList>
}
 

Есть ли какой-нибудь способ, которым я могу этого достичь?

  1. Создайте определенное количество сеансов из одного подключения.(Количество сеансов является свойством конфигурации в файле yml)
  2. Вставьте список сеансов в другой компонент, чтобы создать MessageProducer
  3. Укажите метод уничтожения, чтобы уничтожить их.

Ответ №1:

Вы должны быть в состоянии делать то, что намереваетесь.

  1. Для этого вам нужно будет создать несколько Session компонентов следующим образом:
     @Configuration
    class SessionsConfiguration {
    
      @Autowired
      private GenericApplicationContext applicationContext;
    
      @Value("${your.configuration.key}")
      private int sessionsCount;
    
      @PostConstruct
      fun init() {
        for (int i : sessionsCount) {
            applicationContext.registerBean() // Here you have multiple possibilities. 
            // Check reference documentation at https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/support/GenericApplicationContext.html
        }
      }
    }
     
  2. Ваш код уже должен это делать.
  3. Ваш код уже должен это делать.

Комментарии:

1. Спасибо. Это не то, что я намеревался сделать. Количество сеансов — это свойство конфигурации, которое может изменяться от 2 до 10. Поэтому мне нужно динамически создавать сеансы, а не жестко их кодировать.

2. Это возможно. Я отредактирую свой ответ.

3. Выполнено. Пожалуйста, проверьте это.