Add support for used-defined RedisStandaloneConfiguration
See gh-28028
This commit is contained in:
		
							parent
							
								
									3e5038cddd
								
							
						
					
					
						commit
						236c2dd0da
					
				|  | @ -30,6 +30,7 @@ import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.data.redis.connection.RedisClusterConfiguration; | ||||
| import org.springframework.data.redis.connection.RedisConnectionFactory; | ||||
| import org.springframework.data.redis.connection.RedisSentinelConfiguration; | ||||
| import org.springframework.data.redis.connection.RedisStandaloneConfiguration; | ||||
| import org.springframework.data.redis.connection.jedis.JedisClientConfiguration; | ||||
| import org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder; | ||||
| import org.springframework.data.redis.connection.jedis.JedisConnection; | ||||
|  | @ -41,6 +42,7 @@ import org.springframework.util.StringUtils; | |||
|  * | ||||
|  * @author Mark Paluch | ||||
|  * @author Stephane Nicoll | ||||
|  * @author Eddú Meléndez | ||||
|  */ | ||||
| @Configuration(proxyBeanMethods = false) | ||||
| @ConditionalOnClass({ GenericObjectPool.class, JedisConnection.class, Jedis.class }) | ||||
|  | @ -49,9 +51,10 @@ import org.springframework.util.StringUtils; | |||
| class JedisConnectionConfiguration extends RedisConnectionConfiguration { | ||||
| 
 | ||||
| 	JedisConnectionConfiguration(RedisProperties properties, | ||||
| 			ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider, | ||||
| 			ObjectProvider<RedisSentinelConfiguration> sentinelConfiguration, | ||||
| 			ObjectProvider<RedisClusterConfiguration> clusterConfiguration) { | ||||
| 		super(properties, sentinelConfiguration, clusterConfiguration); | ||||
| 		super(properties, standaloneConfigurationProvider, sentinelConfiguration, clusterConfiguration); | ||||
| 	} | ||||
| 
 | ||||
| 	@Bean | ||||
|  |  | |||
|  | @ -40,6 +40,7 @@ import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.data.redis.connection.RedisClusterConfiguration; | ||||
| import org.springframework.data.redis.connection.RedisConnectionFactory; | ||||
| import org.springframework.data.redis.connection.RedisSentinelConfiguration; | ||||
| import org.springframework.data.redis.connection.RedisStandaloneConfiguration; | ||||
| import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; | ||||
| import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder; | ||||
| import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; | ||||
|  | @ -51,6 +52,7 @@ import org.springframework.util.StringUtils; | |||
|  * | ||||
|  * @author Mark Paluch | ||||
|  * @author Andy Wilkinson | ||||
|  * @author Eddú Meléndez | ||||
|  */ | ||||
| @Configuration(proxyBeanMethods = false) | ||||
| @ConditionalOnClass(RedisClient.class) | ||||
|  | @ -58,9 +60,10 @@ import org.springframework.util.StringUtils; | |||
| class LettuceConnectionConfiguration extends RedisConnectionConfiguration { | ||||
| 
 | ||||
| 	LettuceConnectionConfiguration(RedisProperties properties, | ||||
| 			ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider, | ||||
| 			ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider, | ||||
| 			ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider) { | ||||
| 		super(properties, sentinelConfigurationProvider, clusterConfigurationProvider); | ||||
| 		super(properties, standaloneConfigurationProvider, sentinelConfigurationProvider, clusterConfigurationProvider); | ||||
| 	} | ||||
| 
 | ||||
| 	@Bean(destroyMethod = "shutdown") | ||||
|  |  | |||
|  | @ -39,6 +39,7 @@ import org.springframework.util.StringUtils; | |||
|  * @author Stephane Nicoll | ||||
|  * @author Alen Turkovic | ||||
|  * @author Scott Frederick | ||||
|  * @author Eddú Meléndez | ||||
|  */ | ||||
| abstract class RedisConnectionConfiguration { | ||||
| 
 | ||||
|  | @ -47,19 +48,26 @@ abstract class RedisConnectionConfiguration { | |||
| 
 | ||||
| 	private final RedisProperties properties; | ||||
| 
 | ||||
| 	private final RedisStandaloneConfiguration standaloneConfiguration; | ||||
| 
 | ||||
| 	private final RedisSentinelConfiguration sentinelConfiguration; | ||||
| 
 | ||||
| 	private final RedisClusterConfiguration clusterConfiguration; | ||||
| 
 | ||||
| 	protected RedisConnectionConfiguration(RedisProperties properties, | ||||
| 			ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider, | ||||
| 			ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider, | ||||
| 			ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider) { | ||||
| 		this.properties = properties; | ||||
| 		this.standaloneConfiguration = standaloneConfigurationProvider.getIfAvailable(); | ||||
| 		this.sentinelConfiguration = sentinelConfigurationProvider.getIfAvailable(); | ||||
| 		this.clusterConfiguration = clusterConfigurationProvider.getIfAvailable(); | ||||
| 	} | ||||
| 
 | ||||
| 	protected final RedisStandaloneConfiguration getStandaloneConfig() { | ||||
| 		if (this.standaloneConfiguration != null) { | ||||
| 			return this.standaloneConfiguration; | ||||
| 		} | ||||
| 		RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); | ||||
| 		if (StringUtils.hasText(this.properties.getUrl())) { | ||||
| 			ConnectionInfo connectionInfo = parseUrl(this.properties.getUrl()); | ||||
|  |  | |||
|  | @ -44,6 +44,7 @@ import org.springframework.data.redis.connection.RedisClusterConfiguration; | |||
| import org.springframework.data.redis.connection.RedisConnectionFactory; | ||||
| import org.springframework.data.redis.connection.RedisNode; | ||||
| import org.springframework.data.redis.connection.RedisSentinelConfiguration; | ||||
| import org.springframework.data.redis.connection.RedisStandaloneConfiguration; | ||||
| import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; | ||||
| import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; | ||||
| import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder; | ||||
|  | @ -235,6 +236,14 @@ class RedisAutoConfigurationTests { | |||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	void testRedisConfigurationWithCustomBean() { | ||||
| 		this.contextRunner.withUserConfiguration(RedisStandaloneConfig.class).run((context) -> { | ||||
| 			LettuceConnectionFactory cf = context.getBean(LettuceConnectionFactory.class); | ||||
| 			assertThat(cf.getHostName()).isEqualTo("foo"); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	void testRedisConfigurationWithClientName() { | ||||
| 		this.contextRunner.withPropertyValues("spring.redis.host:foo", "spring.redis.client-name:spring-boot") | ||||
|  | @ -456,4 +465,16 @@ class RedisAutoConfigurationTests { | |||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration(proxyBeanMethods = false) | ||||
| 	static class RedisStandaloneConfig { | ||||
| 
 | ||||
| 		@Bean | ||||
| 		RedisStandaloneConfiguration standaloneConfiguration() { | ||||
| 			RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); | ||||
| 			config.setHostName("foo"); | ||||
| 			return config; | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue