From d688dc76bd6a7ceb030c51be1d971248ebdfc10b Mon Sep 17 00:00:00 2001 From: Ilayaperumal Gopinathan Date: Tue, 18 Aug 2015 17:00:43 -0700 Subject: [PATCH] Add SmartLifecycle to ChannelBindingAdapter - Also set Integer.MIN_VALUE as the phase value for CBA that enables this lifecycle bean to start before any other message producing lifecycle beans --- .../stream/adapter/ChannelBindingAdapter.java | 23 +++++++++++++++++-- ...annelBindingAdapterConfigurationTests.java | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/adapter/ChannelBindingAdapter.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/adapter/ChannelBindingAdapter.java index 9bf731fb5..9f6aa939b 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/adapter/ChannelBindingAdapter.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/adapter/ChannelBindingAdapter.java @@ -36,7 +36,7 @@ import org.springframework.cloud.stream.config.ChannelBindingProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.Lifecycle; +import org.springframework.context.SmartLifecycle; import org.springframework.integration.channel.ChannelInterceptorAware; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.interceptor.WireTap; @@ -58,9 +58,10 @@ import org.springframework.util.StringUtils; * @author Mark Fisher * @author Dave Syer * @author Marius Bogoevici + * @author Ilayaperumal Gopinathan */ @ManagedResource -public class ChannelBindingAdapter implements Lifecycle, ApplicationContextAware { +public class ChannelBindingAdapter implements SmartLifecycle, ApplicationContextAware { private static Logger logger = LoggerFactory.getLogger(ChannelBindingAdapter.class); @@ -403,4 +404,22 @@ public class ChannelBindingAdapter implements Lifecycle, ApplicationContextAware } } + @Override + public boolean isAutoStartup() { + return true; + } + + @Override + public void stop(Runnable callback) { + stop(); + callback.run(); + } + + /** + * Return the lowest value to start this bean before any message producing lifecycle beans. + */ + @Override + public int getPhase() { + return Integer.MIN_VALUE; + } } diff --git a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/config/ChannelBindingAdapterConfigurationTests.java b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/config/ChannelBindingAdapterConfigurationTests.java index 76a085f35..6f4ae2c17 100644 --- a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/config/ChannelBindingAdapterConfigurationTests.java +++ b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/config/ChannelBindingAdapterConfigurationTests.java @@ -82,6 +82,7 @@ public class ChannelBindingAdapterConfigurationTests { channel.setTapped(true); } this.adapter.setOutputChannels(channels); + this.adapter.stop(); this.adapter.start(); }