¿Es posible hacer cumplir el pedido de dos clases @Configuration
?
El caso que tengo es que en una de las clases de configuración ( ConsumerConfiguration
) declaro @Bean
de SimpleMessageListenerContainer
:
@Bean public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory); container.setQueueNames("queue"); return container; }
que se supone que debe escuchar una queue
. (Es parte del proyecto Spring Integration + AMQP)
Mi suposición es que todos los componentes de Rabbit se crearían de antemano y normalmente no quiero declararlos en Java. Sin embargo, para el perfil de desarrollo, me gustaría que la aplicación los creara por mí, por @Configuration
dev
@Configuration @RequiredArgsConstructor @Profile("dev") public class ConsumerBindingConfiguration { @Bean public Exchange exchange() { return ExchangeBuilder.topicExchange("exchange") .durable() .build(); } @Bean Queue queue() { return QueueBuilder.durable("queue") .build(); } @Bean Binding binding() { return BindingBuilder.bind(queue()) .to(exchange()) .with("key") .noargs(); } }
Desafortunadamente, cuando ejecuto la aplicación, la clase ConsumerConfiguration
se ejecuta primero. Parece que la anotación @Order
no funciona para las clases @Configuration
. Vi la anotación @DependsOn
, pero no puedo usarla en mi caso (para cualquier perfil diferente a dev
no quiero declarar la cola).
Puedes intentar usar:
@Configuration @Import({ConsumerBindingConfiguration.class}) public class ConsumerConfiguration