INT-4485: Don't register bean twice for DSL Specs
JIRA: https://jira.spring.io/browse/INT-4485 The `IntegrationFlowBeanPostProcessor` performs extra bean registration for the `IntegrationComponentSpec.get()` result. Essentially it is going to be the same object in the end, but during bean registration phase we end up with names conflict. * Remove an explicit `registerComponent()` for the `IntegrationComponentSpec.get()` * Modify `CorrelationHandlerTests` for all possible usage for the `MessageChannelSpec`, which is essentially a `FactoryBean` **Cherry-pick to 5.0.x**
This commit is contained in:
committed by
Gary Russell
parent
1ce656e4fe
commit
08ebc6684f
@@ -281,7 +281,6 @@ public class IntegrationFlowBeanPostProcessor
|
||||
}
|
||||
|
||||
private void processIntegrationComponentSpec(IntegrationComponentSpec<?, ?> bean) {
|
||||
registerComponent(bean.get(), generateBeanName(bean.get(), bean.getId()));
|
||||
if (bean instanceof ComponentsRegistration) {
|
||||
Map<Object, String> componentsToRegister = ((ComponentsRegistration) bean).getComponentsToRegister();
|
||||
if (!CollectionUtils.isEmpty(componentsToRegister)) {
|
||||
|
||||
@@ -43,6 +43,7 @@ import org.springframework.integration.channel.QueueChannel;
|
||||
import org.springframework.integration.config.EnableIntegration;
|
||||
import org.springframework.integration.dsl.IntegrationFlow;
|
||||
import org.springframework.integration.dsl.IntegrationFlows;
|
||||
import org.springframework.integration.dsl.channel.MessageChannelSpec;
|
||||
import org.springframework.integration.dsl.channel.MessageChannels;
|
||||
import org.springframework.integration.handler.MessageTriggerAction;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
@@ -176,10 +177,15 @@ public class CorrelationHandlerTests {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public IntegrationFlow splitResequenceFlow() {
|
||||
public MessageChannelSpec<?, ?> executorChannel() {
|
||||
return MessageChannels.executor(taskExecutor());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public IntegrationFlow splitResequenceFlow(MessageChannel executorChannel) {
|
||||
return f -> f.enrichHeaders(s -> s.header("FOO", "BAR"))
|
||||
.split("testSplitterData", "buildList", c -> c.applySequence(false))
|
||||
.channel(MessageChannels.executor(taskExecutor()))
|
||||
.channel(executorChannel)
|
||||
.split(Message.class, Message<?>::getPayload, c -> c.applySequence(false))
|
||||
.channel(MessageChannels.executor(taskExecutor()))
|
||||
.split(s -> s
|
||||
@@ -228,6 +234,11 @@ public class CorrelationHandlerTests {
|
||||
.channel(MessageChannels.queue("subscriberAggregateResult"));
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MessageChannelSpec<?, ?> barrierResults() {
|
||||
return MessageChannels.queue("barrierResults");
|
||||
}
|
||||
|
||||
@Bean
|
||||
public IntegrationFlow barrierFlow() {
|
||||
return f -> f
|
||||
@@ -239,13 +250,18 @@ public class CorrelationHandlerTests {
|
||||
.skip(1)
|
||||
.findFirst()
|
||||
.get()))
|
||||
.channel(MessageChannels.queue("barrierResults"));
|
||||
.channel("barrierResults");
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MessageChannelSpec<?, ?> releaseChannel() {
|
||||
return MessageChannels.queue("releaseChannel");
|
||||
}
|
||||
|
||||
@Bean
|
||||
@DependsOn("barrierFlow")
|
||||
public IntegrationFlow releaseBarrierFlow(MessageTriggerAction barrierTriggerAction) {
|
||||
return IntegrationFlows.from(MessageChannels.queue("releaseChannel"))
|
||||
return IntegrationFlows.from(releaseChannel())
|
||||
.trigger(barrierTriggerAction,
|
||||
e -> e.poller(p -> p.fixedDelay(100)))
|
||||
.get();
|
||||
|
||||
Reference in New Issue
Block a user