From 30c40dd0d8ed6b884cc516a98ce068f8bc1b0d56 Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Fri, 8 May 2015 17:10:57 -0500 Subject: [PATCH] Add the ability to pass a map of connection properties to the Redis service connection creator for more control over the created ConnectionFactory. Move connection properties in Rabbit XML configuration up one level. --- .../CloudRabbitConnectionFactoryParser.java | 23 +++--- .../CloudRedisConnectionFactoryParser.java | 16 +++- .../keyval/RedisConnectionFactoryConfig.java | 30 ++++++++ .../RedisConnectionFactoryConfigurer.java | 31 +++++++- .../keyval/RedisConnectionFactoryCreator.java | 6 +- .../RabbitConnectionFactoryConfig.java | 5 +- .../RabbitConnectionFactoryCreator.java | 5 +- .../cloud/config/xml/spring-cloud.xsd | 5 +- ...onnectionFactoryCloudConfigTestHelper.java | 1 + ...onnectionFactoryCloudConfigTestHelper.java | 12 ++- ...RabbitConnectionFactoryJavaConfigTest.java | 39 +++++++++- .../RedisConnectionFactoryJavaConfigTest.java | 76 ++++++++++++++----- .../RabbitConnectionFactoryXmlConfigTest.java | 19 ++++- .../RedisConnectionFactoryXmlConfigTest.java | 17 +++++ .../config/xml/cloud-rabbit-with-config.xml | 22 ++++-- .../config/xml/cloud-redis-with-config.xml | 23 ++++-- 16 files changed, 272 insertions(+), 58 deletions(-) create mode 100644 spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryConfig.java diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudRabbitConnectionFactoryParser.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudRabbitConnectionFactoryParser.java index 687a986..d3a96dc 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudRabbitConnectionFactoryParser.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudRabbitConnectionFactoryParser.java @@ -3,6 +3,7 @@ package org.springframework.cloud.config.xml; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.cloud.service.messaging.RabbitConnectionFactoryConfig; import org.springframework.cloud.service.messaging.RabbitConnectionFactoryFactory; import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; @@ -30,28 +31,30 @@ public class CloudRabbitConnectionFactoryParser extends AbstractNestedElementClo protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { super.doParse(element, parserContext, builder); - BeanDefinition cloudRabbitConfiguration = null; - Element rabbitOptionsElement = DomUtils.getChildElementByTagName(element, RABBIT_OPTIONS); - if (rabbitOptionsElement != null) { - cloudRabbitConfiguration = parseRabbitOptionsElement(rabbitOptionsElement, parserContext); - } + BeanDefinition cloudRabbitConfiguration = parseRabbitOptionsElement(element, parserContext); builder.addConstructorArgValue(cloudRabbitConfiguration); } private BeanDefinition parseRabbitOptionsElement(Element element, ParserContext parserContext) { BeanDefinitionBuilder configBeanBuilder = - BeanDefinitionBuilder.genericBeanDefinition("org.springframework.cloud.service.messaging.RabbitConnectionFactoryConfig"); + BeanDefinitionBuilder.genericBeanDefinition(RabbitConnectionFactoryConfig.class.getName()); Element propertiesElement = DomUtils.getChildElementByTagName(element, CONNECTION_PROPERTIES); if (propertiesElement != null) { - Map map = parserContext.getDelegate().parseMapElement(propertiesElement, configBeanBuilder.getRawBeanDefinition()); - configBeanBuilder.addConstructorArgValue(map); + Map properties = parserContext.getDelegate().parseMapElement(propertiesElement, configBeanBuilder.getRawBeanDefinition()); + configBeanBuilder.addConstructorArgValue(properties); } - String channelCacheSize = element.getAttribute(CHANNEL_CACHE_SIZE); - configBeanBuilder.addConstructorArgValue(channelCacheSize); + Element rabbitOptionsElement = DomUtils.getChildElementByTagName(element, RABBIT_OPTIONS); + if (rabbitOptionsElement != null) { + String channelCacheSize = rabbitOptionsElement.getAttribute(CHANNEL_CACHE_SIZE); + configBeanBuilder.addConstructorArgValue(channelCacheSize); + } + if (propertiesElement == null && rabbitOptionsElement == null) { + return null; + } return configBeanBuilder.getBeanDefinition(); } } diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudRedisConnectionFactoryParser.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudRedisConnectionFactoryParser.java index 582098b..4ce7f4a 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudRedisConnectionFactoryParser.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudRedisConnectionFactoryParser.java @@ -3,10 +3,13 @@ package org.springframework.cloud.config.xml; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.cloud.service.keyval.RedisConnectionFactoryConfig; import org.springframework.cloud.service.keyval.RedisConnectionFactoryFactory; import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; +import java.util.Map; + /** * Parser for the {@code } namespace element * @@ -17,6 +20,7 @@ import org.w3c.dom.Element; public class CloudRedisConnectionFactoryParser extends AbstractPoolingCloudServiceFactoryParser { private static final String ELEMENT_POOL = "pool"; + private static final String CONNECTION_PROPERTIES = "connection-properties"; public CloudRedisConnectionFactoryParser() { super(RedisConnectionFactoryFactory.class); @@ -26,16 +30,22 @@ public class CloudRedisConnectionFactoryParser extends AbstractPoolingCloudServi protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { super.doParse(element, parserContext, builder); + BeanDefinitionBuilder redisConfigBeanBuilder = + BeanDefinitionBuilder.genericBeanDefinition(RedisConnectionFactoryConfig.class.getName()); + BeanDefinition cloudPoolConfiguration = null; Element poolElement = DomUtils.getChildElementByTagName(element, ELEMENT_POOL); if (poolElement != null) { cloudPoolConfiguration = parsePoolElement(poolElement, parserContext); } - - BeanDefinitionBuilder redisConfigBeanBuilder = - BeanDefinitionBuilder.genericBeanDefinition("org.springframework.cloud.service.PooledServiceConnectorConfig"); redisConfigBeanBuilder.addConstructorArgValue(cloudPoolConfiguration); + Element propertiesElement = DomUtils.getChildElementByTagName(element, CONNECTION_PROPERTIES); + if (propertiesElement != null) { + Map properties = parserContext.getDelegate().parseMapElement(propertiesElement, builder.getRawBeanDefinition()); + redisConfigBeanBuilder.addConstructorArgValue(properties); + } + builder.addConstructorArgValue(redisConfigBeanBuilder.getBeanDefinition()); } } \ No newline at end of file diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryConfig.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryConfig.java new file mode 100644 index 0000000..b8fc501 --- /dev/null +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryConfig.java @@ -0,0 +1,30 @@ +package org.springframework.cloud.service.keyval; + +import org.springframework.cloud.service.MapServiceConnectorConfig; +import org.springframework.cloud.service.PooledServiceConnectorConfig; + +import java.util.Map; + +/** + * @author Scott Frederick + */ +public class RedisConnectionFactoryConfig extends PooledServiceConnectorConfig { + private MapServiceConnectorConfig connectionConfig; + + public RedisConnectionFactoryConfig(PoolConfig poolConfig) { + this(poolConfig, null); + } + + public RedisConnectionFactoryConfig(Map properties) { + this(null, properties); + } + + public RedisConnectionFactoryConfig(PoolConfig poolConfig, Map properties) { + super(poolConfig); + this.connectionConfig = new MapServiceConnectorConfig(properties); + } + + public MapServiceConnectorConfig getConnectionProperties() { + return connectionConfig; + } +} diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryConfigurer.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryConfigurer.java index 5c53395..449f838 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryConfigurer.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryConfigurer.java @@ -2,6 +2,8 @@ package org.springframework.cloud.service.keyval; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; +import org.springframework.cloud.service.MapServiceConnectionConfigurer; +import org.springframework.cloud.service.MapServiceConnectorConfig; import org.springframework.cloud.service.PooledServiceConnectorConfig; import org.springframework.cloud.service.ServiceConnectorConfigurer; import org.springframework.cloud.service.Util; @@ -12,20 +14,43 @@ import redis.clients.jedis.JedisPoolConfig; /** * * @author Ramnivas Laddad + * @author Scott Frederick * */ -public class RedisConnectionFactoryConfigurer implements ServiceConnectorConfigurer { +public class RedisConnectionFactoryConfigurer implements ServiceConnectorConfigurer { + private MapServiceConnectionConfigurer mapServiceConnectionConfigurer = + new MapServiceConnectionConfigurer(); @Override + public JedisConnectionFactory configure(JedisConnectionFactory connectionFactory, RedisConnectionFactoryConfig config) { + if (config != null) { + configurePool(connectionFactory, config); + configureConnection(connectionFactory, config); + } + return connectionFactory; + } + public JedisConnectionFactory configure(JedisConnectionFactory connectionFactory, PooledServiceConnectorConfig config) { - if (config != null && config.getPoolConfig() != null) { + if (config != null) { + configurePool(connectionFactory, config); + } + return connectionFactory; + } + + private void configurePool(JedisConnectionFactory connectionFactory, PooledServiceConnectorConfig config) { + if (config.getPoolConfig() != null) { JedisPoolConfig poolConfig = new JedisPoolConfig(); BeanWrapper target = new BeanWrapperImpl(poolConfig); BeanWrapper source = new BeanWrapperImpl(config.getPoolConfig()); Util.setCorrespondingProperties(target, source); connectionFactory.setPoolConfig(poolConfig); } - return connectionFactory; + } + + private void configureConnection(JedisConnectionFactory connectionFactory, RedisConnectionFactoryConfig config) { + if (config.getConnectionProperties() != null) { + mapServiceConnectionConfigurer.configure(connectionFactory, config.getConnectionProperties()); + } } } diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryCreator.java index 39dc12b..eac44a3 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryCreator.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/keyval/RedisConnectionFactoryCreator.java @@ -31,7 +31,11 @@ public class RedisConnectionFactoryCreator extends AbstractServiceConnectorCreat connectionFactory.setHostName(serviceInfo.getHost()); connectionFactory.setPort(serviceInfo.getPort()); connectionFactory.setPassword(serviceInfo.getPassword()); - configurer.configure(connectionFactory, (PooledServiceConnectorConfig) serviceConnectorConfig); + if (serviceConnectorConfig instanceof RedisConnectionFactoryConfig) { + configurer.configure(connectionFactory, (RedisConnectionFactoryConfig) serviceConnectorConfig); + } else { + configurer.configure(connectionFactory, (PooledServiceConnectorConfig) serviceConnectorConfig); + } connectionFactory.afterPropertiesSet(); return connectionFactory; } else { diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryConfig.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryConfig.java index 91b717f..a4907a7 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryConfig.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryConfig.java @@ -15,12 +15,11 @@ public class RabbitConnectionFactoryConfig extends MapServiceConnectorConfig { private Integer channelCacheSize; public RabbitConnectionFactoryConfig(Map properties) { - super(properties); + this(properties, null); } public RabbitConnectionFactoryConfig(Integer channelCacheSize) { - super(null); - this.channelCacheSize = channelCacheSize; + this(null, channelCacheSize); } public RabbitConnectionFactoryConfig(Map properties, Integer channelCacheSize) { diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryCreator.java index 9eac8f5..441f6c4 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryCreator.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryCreator.java @@ -32,7 +32,10 @@ public class RabbitConnectionFactoryCreator extends AbstractServiceConnectorCrea CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(connectionFactory); if (serviceConnectorConfiguration != null) { - cachingConnectionFactory.setChannelCacheSize(((RabbitConnectionFactoryConfig)serviceConnectorConfiguration).getChannelCacheSize()); + Integer channelCacheSize = ((RabbitConnectionFactoryConfig) serviceConnectorConfiguration).getChannelCacheSize(); + if (channelCacheSize != null) { + cachingConnectionFactory.setChannelCacheSize(channelCacheSize); + } } return cachingConnectionFactory; diff --git a/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd b/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd index 4cef192..1098e90 100644 --- a/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd +++ b/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd @@ -87,6 +87,7 @@ + @@ -115,6 +116,7 @@ + @@ -282,9 +284,6 @@ Element defining optional Rabbit configuration settings. ]]> - - - properties = new HashMap(); properties.put("requestedHeartbeat", 5); properties.put("connectionTimeout", 10); - RabbitConnectionFactoryConfig serviceConfig = new RabbitConnectionFactoryConfig(properties, 200); + RabbitConnectionFactoryConfig serviceConfig = new RabbitConnectionFactoryConfig(properties); + return connectionFactory().rabbitConnectionFactory("my-service", serviceConfig); + } + + @Bean + public ConnectionFactory connectionFactoryWithConfigAndProperties() { + Map properties = new HashMap(); + properties.put("requestedHeartbeat", 15); + properties.put("connectionTimeout", 20); + RabbitConnectionFactoryConfig serviceConfig = new RabbitConnectionFactoryConfig(properties, 300); return connectionFactory().rabbitConnectionFactory("my-service", serviceConfig); } } \ No newline at end of file diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/RedisConnectionFactoryJavaConfigTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/RedisConnectionFactoryJavaConfigTest.java index f0223a7..1927db4 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/RedisConnectionFactoryJavaConfigTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/RedisConnectionFactoryJavaConfigTest.java @@ -5,58 +5,82 @@ import org.springframework.cloud.config.RedisConnectionFactoryCloudConfigTestHel import org.springframework.cloud.service.PooledServiceConnectorConfig; import org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig; import org.springframework.cloud.service.ServiceInfo; +import org.springframework.cloud.service.keyval.RedisConnectionFactoryConfig; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; +import java.util.HashMap; +import java.util.Map; + /** - * * @author Ramnivas Laddad - * + * @author Scott Frederick */ public class RedisConnectionFactoryJavaConfigTest extends AbstractServiceJavaConfigTest { public RedisConnectionFactoryJavaConfigTest() { super(RedisConnectionFactoryConfigWithId.class, RedisConnectionFactoryConfigWithoutId.class); } - + protected ServiceInfo createService(String id) { return createRedisService(id); } - + protected Class getConnectorType() { return RedisConnectionFactory.class; } - + @Test public void cloudRedisConnectionFactoryWithMaxPool() { - ApplicationContext testContext = - getTestApplicationContext(RedisConnectionFactoryConfigWithServiceConfig.class, - createService("my-service")); - + ApplicationContext testContext = + getTestApplicationContext(RedisConnectionFactoryConfigWithServiceConfig.class, + createService("my-service")); + RedisConnectionFactory connector = testContext.getBean("pool20Wait200", getConnectorType()); RedisConnectionFactoryCloudConfigTestHelper.assertPoolProperties(connector, 20, 0, 200); } - + @Test public void cloudRedisConnectionFactoryWithMinMaxPool() { - ApplicationContext testContext = - getTestApplicationContext(RedisConnectionFactoryConfigWithServiceConfig.class, - createService("my-service")); - + ApplicationContext testContext = + getTestApplicationContext(RedisConnectionFactoryConfigWithServiceConfig.class, + createService("my-service")); + RedisConnectionFactory connector = testContext.getBean("pool5_30Wait3000", getConnectorType()); RedisConnectionFactoryCloudConfigTestHelper.assertPoolProperties(connector, 30, 5, 3000); } + + @Test + public void cloudRedisConnectionFactoryWithTimeout() { + ApplicationContext testContext = + getTestApplicationContext(RedisConnectionFactoryConfigWithServiceConfig.class, + createService("my-service")); + + RedisConnectionFactory connector = testContext.getBean("timeout10", getConnectorType()); + RedisConnectionFactoryCloudConfigTestHelper.assertConnectionProperties(connector, 10); + } + + @Test + public void cloudRedisConnectionFactoryWithWithMaxPoolAndTimeout() { + ApplicationContext testContext = + getTestApplicationContext(RedisConnectionFactoryConfigWithServiceConfig.class, + createService("my-service")); + + RedisConnectionFactory connector = testContext.getBean("pool30Wait300_timeout20", getConnectorType()); + RedisConnectionFactoryCloudConfigTestHelper.assertPoolProperties(connector, 30, 0, 300); + RedisConnectionFactoryCloudConfigTestHelper.assertConnectionProperties(connector, 20); + } } class RedisConnectionFactoryConfigWithId extends AbstractCloudConfig { - @Bean(name="my-service") + @Bean(name = "my-service") public RedisConnectionFactory testRedisConnectionFactory() { return connectionFactory().redisConnectionFactory("my-service"); } } class RedisConnectionFactoryConfigWithoutId extends AbstractCloudConfig { - @Bean(name="my-service") + @Bean(name = "my-service") public RedisConnectionFactory testRedisConnectionFactory() { return connectionFactory().redisConnectionFactory(); } @@ -69,12 +93,28 @@ class RedisConnectionFactoryConfigWithServiceConfig extends AbstractCloudConfig PooledServiceConnectorConfig serviceConfig = new PooledServiceConnectorConfig(poolConfig); return connectionFactory().redisConnectionFactory("my-service", serviceConfig); } - + @Bean public RedisConnectionFactory pool5_30Wait3000() { PoolConfig poolConfig = new PoolConfig(5, 30, 3000); - PooledServiceConnectorConfig serviceConfig = new PooledServiceConnectorConfig(poolConfig); + PooledServiceConnectorConfig serviceConfig = new RedisConnectionFactoryConfig(poolConfig); return connectionFactory().redisConnectionFactory("my-service", serviceConfig); } + @Bean + public RedisConnectionFactory timeout10() { + Map properties = new HashMap(); + properties.put("timeout", 10); + RedisConnectionFactoryConfig serviceConfig = new RedisConnectionFactoryConfig(properties); + return connectionFactory().redisConnectionFactory("my-service", serviceConfig); + } + + @Bean + public RedisConnectionFactory pool30Wait300_timeout20() { + Map properties = new HashMap(); + properties.put("timeout", 20); + PoolConfig poolConfig = new PoolConfig(30, 300); + RedisConnectionFactoryConfig serviceConfig = new RedisConnectionFactoryConfig(poolConfig, properties); + return connectionFactory().redisConnectionFactory("my-service", serviceConfig); + } } \ No newline at end of file diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/RabbitConnectionFactoryXmlConfigTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/RabbitConnectionFactoryXmlConfigTest.java index 3d105d0..ebb917f 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/RabbitConnectionFactoryXmlConfigTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/RabbitConnectionFactoryXmlConfigTest.java @@ -6,6 +6,8 @@ import org.springframework.cloud.config.RabbitConnectionFactoryCloudConfigTestHe import org.springframework.cloud.service.ServiceInfo; import org.springframework.context.ApplicationContext; +import static org.springframework.cloud.config.RabbitConnectionFactoryCloudConfigTestHelper.DEFAULT_CHANNEL_CACHE_SIZE; + /** * * @author Ramnivas Laddad @@ -34,7 +36,22 @@ public class RabbitConnectionFactoryXmlConfigTest extends AbstractServiceXmlConf ApplicationContext testContext = getTestApplicationContext("cloud-rabbit-with-config.xml", createService("my-service")); ConnectionFactory connector = testContext.getBean("service-channelCacheSize200", getConnectorType()); - RabbitConnectionFactoryCloudConfigTestHelper.assertConfigProperties(connector, 200, 5, 10); + RabbitConnectionFactoryCloudConfigTestHelper.assertConfigProperties(connector, 200, 0, 0); } + @Test + public void cloudRabbitConnectionFactoryWithProperties() { + ApplicationContext testContext = getTestApplicationContext("cloud-rabbit-with-config.xml", createService("my-service")); + + ConnectionFactory connector = testContext.getBean("service-properties", getConnectorType()); + RabbitConnectionFactoryCloudConfigTestHelper.assertConfigProperties(connector, DEFAULT_CHANNEL_CACHE_SIZE, 5, 10); + } + + @Test + public void cloudRabbitConnectionFactoryWithConfigurationAndProperties() { + ApplicationContext testContext = getTestApplicationContext("cloud-rabbit-with-config.xml", createService("my-service")); + + ConnectionFactory connector = testContext.getBean("service-channelCacheSize200-properties", getConnectorType()); + RabbitConnectionFactoryCloudConfigTestHelper.assertConfigProperties(connector, 200, 5, 10); + } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/RedisConnectionFactoryXmlConfigTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/RedisConnectionFactoryXmlConfigTest.java index 76ce918..520ef1f 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/RedisConnectionFactoryXmlConfigTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/RedisConnectionFactoryXmlConfigTest.java @@ -44,4 +44,21 @@ public class RedisConnectionFactoryXmlConfigTest extends AbstractServiceXmlConfi RedisConnectionFactory connector = testContext.getBean("service-pool5-30-wait3000", getConnectorType()); RedisConnectionFactoryCloudConfigTestHelper.assertPoolProperties(connector, 30, 5, 3000); } + + @Test + public void cloudRedisConnectionFactoryWithTimeout() { + ApplicationContext testContext = getTestApplicationContext("cloud-redis-with-config.xml", createService("my-service")); + + RedisConnectionFactory connector = testContext.getBean("service-timeout10", getConnectorType()); + RedisConnectionFactoryCloudConfigTestHelper.assertConnectionProperties(connector, 10); + } + + @Test + public void cloudRedisConnectionFactoryWithMaxPoolAndTimeout() { + ApplicationContext testContext = getTestApplicationContext("cloud-redis-with-config.xml", createService("my-service")); + + RedisConnectionFactory connector = testContext.getBean("service-pool30-wait300-timeout20", getConnectorType()); + RedisConnectionFactoryCloudConfigTestHelper.assertPoolProperties(connector, 30, 0, 300); + RedisConnectionFactoryCloudConfigTestHelper.assertConnectionProperties(connector, 20); + } } diff --git a/spring-cloud-spring-service-connector/src/test/resources/org/springframework/cloud/config/xml/cloud-rabbit-with-config.xml b/spring-cloud-spring-service-connector/src/test/resources/org/springframework/cloud/config/xml/cloud-rabbit-with-config.xml index 8c610ab..ef59401 100644 --- a/spring-cloud-spring-service-connector/src/test/resources/org/springframework/cloud/config/xml/cloud-rabbit-with-config.xml +++ b/spring-cloud-spring-service-connector/src/test/resources/org/springframework/cloud/config/xml/cloud-rabbit-with-config.xml @@ -6,11 +6,21 @@ http://www.springframework.org/schema/cloud http://www.springframework.org/schema/cloud/spring-cloud.xsd"> - - - - - - + + + + + + + + + + + + + + + + diff --git a/spring-cloud-spring-service-connector/src/test/resources/org/springframework/cloud/config/xml/cloud-redis-with-config.xml b/spring-cloud-spring-service-connector/src/test/resources/org/springframework/cloud/config/xml/cloud-redis-with-config.xml index 087f52b..b0fd7e9 100644 --- a/spring-cloud-spring-service-connector/src/test/resources/org/springframework/cloud/config/xml/cloud-redis-with-config.xml +++ b/spring-cloud-spring-service-connector/src/test/resources/org/springframework/cloud/config/xml/cloud-redis-with-config.xml @@ -4,14 +4,27 @@ xmlns:cloud="http://www.springframework.org/schema/cloud" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cloud http://www.springframework.org/schema/cloud/spring-cloud.xsd"> - - + + - + - + - + + + + + + + + + + + + + +