2つの@Configuration
クラスの注文を強制することは可能ですか? queue
を聞くことになっているSpring `@ Configuration`クラスの注文
@Bean
public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container =
new SimpleMessageListenerContainer(connectionFactory);
container.setQueueNames("queue");
return container;
}
:私が持っている
ケース(ConsumerConfiguration
)設定クラスの一つで、私は@Bean
SimpleMessageListenerContainer
で宣言することです。 (これはSpring Integration + AMQPプロジェクトの一部です)
私の想定では、すべてのRabbitコンポーネントは事前に作成され、通常はJavaで宣言したくありません。しかし、私は私のためにそれらを作成するためのアプリケーションを希望dev
プロファイルのため、それ故に別の@Configuration
クラス:私は、アプリケーションを実行すると
@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();
}
}
残念ながら、ConsumerConfiguration
クラスが最初に実行されています。 @Order
注釈が@Configuration
クラスでは機能していないようです。私は@DependsOn
注釈を見ましたが、私の場合は使用できません(dev
以外のプロファイルでは、キューを宣言したくありません)。
あなたは「最初の実行」とはどういう意味ですか?それはなぜ問題なのですか? Springはまず、Beanのインスタンス化を開始する前に、すべてのクラスからすべてのBean定義を作成します。 –
あなたのコードに 'AmqpAdmin'がありません:http://docs.spring.io/spring-amqp/reference/html/_reference.html#broker-configuration –
ありがとう@GaryRussell、あなたのコメントは私の考えを得ました..私はそれを反映したサンプルプロジェクトを作成し始めました。同じ名前のBean(別の 'exchange()'、 'queue()'、 'binding()')で別の 'BindingConfiguration'を持っていました。重複した名前をすべて解決したら... 楽しい事実:コンフィグレーションクラス名に依存する最初のコンフィグレーションまたは他のコンフィグレーションから 'queue()' beanを読み込みました。 –