GH-1412 Ensured SpelExpressionConverterConfiguration present in multi-binder

Ensured that SpelExpressionConverterConfiguration is always present in the AC regardless of single or multi-binder application configuration
Polishing

Resolves #1412
This commit is contained in:
Oleg Zhurakousky
2018-07-09 20:28:48 +02:00
committed by Soby Chacko
parent 66cfdffad9
commit 37ecae4ab7
5 changed files with 16 additions and 12 deletions

View File

@@ -53,7 +53,7 @@ import static org.junit.Assert.assertNull;
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { MessageChannelConfigurerTests.TestSink.class,
MessageChannelConfigurerTests.TestSource.class })
MessageChannelConfigurerTests.TestSource.class, SpelExpressionConverterConfiguration.class})
public class MessageChannelConfigurerTests {
@Autowired
@@ -65,8 +65,6 @@ public class MessageChannelConfigurerTests {
@Autowired
private CompositeMessageConverterFactory messageConverterFactory;
private ObjectMapper objectMapper = new ObjectMapper();
@Autowired
private MessageCollector messageCollector;

View File

@@ -26,7 +26,6 @@ import java.lang.annotation.Target;
import org.springframework.cloud.stream.config.BinderFactoryConfiguration;
import org.springframework.cloud.stream.config.BindingBeansRegistrar;
import org.springframework.cloud.stream.config.BindingServiceConfiguration;
import org.springframework.cloud.stream.config.SpelExpressionConverterConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.integration.config.EnableIntegration;
@@ -44,8 +43,7 @@ import org.springframework.integration.config.EnableIntegration;
@Documented
@Inherited
@Configuration
@Import({ BindingServiceConfiguration.class, BindingBeansRegistrar.class, BinderFactoryConfiguration.class,
SpelExpressionConverterConfiguration.class })
@Import({ BindingServiceConfiguration.class, BindingBeansRegistrar.class, BinderFactoryConfiguration.class})
@EnableIntegration
public @interface EnableBinding {

View File

@@ -31,11 +31,11 @@ import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.Banner.Mode;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.stream.config.SpelExpressionConverterConfiguration;
import org.springframework.cloud.stream.reflection.GenericsUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.util.Assert;
@@ -209,8 +209,11 @@ public class DefaultBinderFactory implements BinderFactory, DisposableBean, Appl
ConfigurableEnvironment environment = this.context != null ? this.context.getEnvironment() : null;
String defaultDomain = environment != null ? environment.getProperty("spring.jmx.default-domain") : "";
args.add("--spring.jmx.default-domain=" + defaultDomain + "binder." + configurationName);
args.add("--spring.main.applicationContextClass=" + AnnotationConfigApplicationContext.class.getName());
SpringApplicationBuilder springApplicationBuilder = new SpringApplicationBuilder()
// Initializing SpringApplicationBuilder with SpelExpressionConverterConfiguration due to the fact that
// infrastructure related configuration is not propagated in a multi binder scenario.
// See this GH issue for more details: https://github.com/spring-cloud/spring-cloud-stream/issues/1412
// and the associated PR: https://github.com/spring-cloud/spring-cloud-stream/pull/1413
SpringApplicationBuilder springApplicationBuilder = new SpringApplicationBuilder(SpelExpressionConverterConfiguration.class)
.sources(binderType.getConfigurationClasses())
.bannerMode(Mode.OFF)
.logStartupInfo(false)
@@ -226,6 +229,7 @@ public class DefaultBinderFactory implements BinderFactory, DisposableBean, Appl
if (useApplicationContextAsParent) {
springApplicationBuilder.parent(this.context);
}
if (environment != null && (useApplicationContextAsParent || binderConfiguration.isInheritEnvironment())) {
StandardEnvironment binderEnvironment = new StandardEnvironment();
binderEnvironment.merge(environment);

View File

@@ -27,6 +27,7 @@ import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration;
import org.springframework.cloud.stream.config.BindingProperties;
import org.springframework.cloud.stream.config.BindingServiceProperties;
import org.springframework.cloud.stream.config.SpelExpressionConverterConfiguration;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -35,9 +36,9 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
* @author Ilayaperumal Gopinathan
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {TestChannelBinderConfiguration.class, SourceBindingWithGlobalPropertiesOnlyTest.TestSource.class}, properties = {
"spring.cloud.stream.default.contentType=application/json",
"spring.cloud.stream.default.producer.partitionKeyExpression=key" })
@SpringBootTest(classes = {TestChannelBinderConfiguration.class, SourceBindingWithGlobalPropertiesOnlyTest.TestSource.class, SpelExpressionConverterConfiguration.class},
properties = {"spring.cloud.stream.default.contentType=application/json",
"spring.cloud.stream.default.producer.partitionKeyExpression=key" })
public class SourceBindingWithGlobalPropertiesOnlyTest {
@Autowired

View File

@@ -21,8 +21,10 @@ import java.util.Collections;
import org.springframework.cloud.stream.binder.BinderType;
import org.springframework.cloud.stream.binder.BinderTypeRegistry;
import org.springframework.cloud.stream.binder.DefaultBinderTypeRegistry;
import org.springframework.cloud.stream.config.SpelExpressionConverterConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* A simple configuration that creates mock
@@ -30,6 +32,7 @@ import org.springframework.context.annotation.Configuration;
* @author Marius Bogoevici
*/
@Configuration
@Import(SpelExpressionConverterConfiguration.class)
public class MockBinderRegistryConfiguration {
@Bean