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.RedisClusterConfiguration;
|
||||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
|
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;
|
||||||
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder;
|
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration.JedisClientConfigurationBuilder;
|
||||||
import org.springframework.data.redis.connection.jedis.JedisConnection;
|
import org.springframework.data.redis.connection.jedis.JedisConnection;
|
||||||
|
|
@ -41,6 +42,7 @@ import org.springframework.util.StringUtils;
|
||||||
*
|
*
|
||||||
* @author Mark Paluch
|
* @author Mark Paluch
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
|
* @author Eddú Meléndez
|
||||||
*/
|
*/
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
@ConditionalOnClass({ GenericObjectPool.class, JedisConnection.class, Jedis.class })
|
@ConditionalOnClass({ GenericObjectPool.class, JedisConnection.class, Jedis.class })
|
||||||
|
|
@ -49,9 +51,10 @@ import org.springframework.util.StringUtils;
|
||||||
class JedisConnectionConfiguration extends RedisConnectionConfiguration {
|
class JedisConnectionConfiguration extends RedisConnectionConfiguration {
|
||||||
|
|
||||||
JedisConnectionConfiguration(RedisProperties properties,
|
JedisConnectionConfiguration(RedisProperties properties,
|
||||||
|
ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider,
|
||||||
ObjectProvider<RedisSentinelConfiguration> sentinelConfiguration,
|
ObjectProvider<RedisSentinelConfiguration> sentinelConfiguration,
|
||||||
ObjectProvider<RedisClusterConfiguration> clusterConfiguration) {
|
ObjectProvider<RedisClusterConfiguration> clusterConfiguration) {
|
||||||
super(properties, sentinelConfiguration, clusterConfiguration);
|
super(properties, standaloneConfigurationProvider, sentinelConfiguration, clusterConfiguration);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.data.redis.connection.RedisClusterConfiguration;
|
import org.springframework.data.redis.connection.RedisClusterConfiguration;
|
||||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
|
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;
|
||||||
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder;
|
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder;
|
||||||
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||||
|
|
@ -51,6 +52,7 @@ import org.springframework.util.StringUtils;
|
||||||
*
|
*
|
||||||
* @author Mark Paluch
|
* @author Mark Paluch
|
||||||
* @author Andy Wilkinson
|
* @author Andy Wilkinson
|
||||||
|
* @author Eddú Meléndez
|
||||||
*/
|
*/
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
@ConditionalOnClass(RedisClient.class)
|
@ConditionalOnClass(RedisClient.class)
|
||||||
|
|
@ -58,9 +60,10 @@ import org.springframework.util.StringUtils;
|
||||||
class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
|
class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
|
||||||
|
|
||||||
LettuceConnectionConfiguration(RedisProperties properties,
|
LettuceConnectionConfiguration(RedisProperties properties,
|
||||||
|
ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider,
|
||||||
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
|
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
|
||||||
ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider) {
|
ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider) {
|
||||||
super(properties, sentinelConfigurationProvider, clusterConfigurationProvider);
|
super(properties, standaloneConfigurationProvider, sentinelConfigurationProvider, clusterConfigurationProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean(destroyMethod = "shutdown")
|
@Bean(destroyMethod = "shutdown")
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ import org.springframework.util.StringUtils;
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
* @author Alen Turkovic
|
* @author Alen Turkovic
|
||||||
* @author Scott Frederick
|
* @author Scott Frederick
|
||||||
|
* @author Eddú Meléndez
|
||||||
*/
|
*/
|
||||||
abstract class RedisConnectionConfiguration {
|
abstract class RedisConnectionConfiguration {
|
||||||
|
|
||||||
|
|
@ -47,19 +48,26 @@ abstract class RedisConnectionConfiguration {
|
||||||
|
|
||||||
private final RedisProperties properties;
|
private final RedisProperties properties;
|
||||||
|
|
||||||
|
private final RedisStandaloneConfiguration standaloneConfiguration;
|
||||||
|
|
||||||
private final RedisSentinelConfiguration sentinelConfiguration;
|
private final RedisSentinelConfiguration sentinelConfiguration;
|
||||||
|
|
||||||
private final RedisClusterConfiguration clusterConfiguration;
|
private final RedisClusterConfiguration clusterConfiguration;
|
||||||
|
|
||||||
protected RedisConnectionConfiguration(RedisProperties properties,
|
protected RedisConnectionConfiguration(RedisProperties properties,
|
||||||
|
ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider,
|
||||||
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
|
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
|
||||||
ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider) {
|
ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider) {
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
|
this.standaloneConfiguration = standaloneConfigurationProvider.getIfAvailable();
|
||||||
this.sentinelConfiguration = sentinelConfigurationProvider.getIfAvailable();
|
this.sentinelConfiguration = sentinelConfigurationProvider.getIfAvailable();
|
||||||
this.clusterConfiguration = clusterConfigurationProvider.getIfAvailable();
|
this.clusterConfiguration = clusterConfigurationProvider.getIfAvailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final RedisStandaloneConfiguration getStandaloneConfig() {
|
protected final RedisStandaloneConfiguration getStandaloneConfig() {
|
||||||
|
if (this.standaloneConfiguration != null) {
|
||||||
|
return this.standaloneConfiguration;
|
||||||
|
}
|
||||||
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
|
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
|
||||||
if (StringUtils.hasText(this.properties.getUrl())) {
|
if (StringUtils.hasText(this.properties.getUrl())) {
|
||||||
ConnectionInfo connectionInfo = parseUrl(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.RedisConnectionFactory;
|
||||||
import org.springframework.data.redis.connection.RedisNode;
|
import org.springframework.data.redis.connection.RedisNode;
|
||||||
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
|
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.jedis.JedisConnectionFactory;
|
||||||
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
|
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
|
||||||
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder;
|
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
|
@Test
|
||||||
void testRedisConfigurationWithClientName() {
|
void testRedisConfigurationWithClientName() {
|
||||||
this.contextRunner.withPropertyValues("spring.redis.host:foo", "spring.redis.client-name:spring-boot")
|
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