Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.springframework.boot.data.redis.autoconfigure.DataRedisConnectionDetails.Standalone;
import org.springframework.boot.data.redis.autoconfigure.DataRedisProperties.Pool;
import org.springframework.boot.ssl.SslBundle;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisPassword;
Expand All @@ -36,6 +37,7 @@
import org.springframework.data.redis.connection.RedisStaticMasterReplicaConfiguration;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;

/**
* Base Redis connection configuration.
Expand All @@ -55,6 +57,8 @@ abstract class DataRedisConnectionConfiguration {
private static final boolean COMMONS_POOL2_AVAILABLE = ClassUtils.isPresent("org.apache.commons.pool2.ObjectPool",
DataRedisConnectionConfiguration.class.getClassLoader());

private final Environment environment;

private final DataRedisProperties properties;

private final @Nullable RedisStandaloneConfiguration standaloneConfiguration;
Expand All @@ -69,12 +73,13 @@ abstract class DataRedisConnectionConfiguration {

protected final Mode mode;

protected DataRedisConnectionConfiguration(DataRedisProperties properties,
protected DataRedisConnectionConfiguration(Environment environment, DataRedisProperties properties,
DataRedisConnectionDetails connectionDetails,
ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider,
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider,
ObjectProvider<RedisStaticMasterReplicaConfiguration> masterReplicaConfiguration) {
this.environment = environment;
this.properties = properties;
this.standaloneConfiguration = standaloneConfigurationProvider.getIfAvailable();
this.sentinelConfiguration = sentinelConfigurationProvider.getIfAvailable();
Expand Down Expand Up @@ -180,6 +185,17 @@ protected final DataRedisProperties getProperties() {
return this.properties;
}

protected @Nullable String determineClientName() {
String clientName = getProperties().getClientName();
if (!StringUtils.hasText(clientName)) {
String applicationName = this.environment.getProperty("spring.application.name");
if (StringUtils.hasText(applicationName)) {
clientName = applicationName;
}
}
return clientName;
}

protected @Nullable SslBundle getSslBundle() {
return this.connectionDetails.getSslBundle();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.springframework.boot.thread.Threading;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
Expand All @@ -56,20 +57,21 @@
* @author Andy Wilkinson
* @author Phillip Webb
* @author Scott Frederick
* @author Yanming Zhou
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ GenericObjectPool.class, JedisConnection.class, Jedis.class })
@ConditionalOnMissingBean(RedisConnectionFactory.class)
@ConditionalOnProperty(name = "spring.data.redis.client-type", havingValue = "jedis", matchIfMissing = true)
class JedisConnectionConfiguration extends DataRedisConnectionConfiguration {

JedisConnectionConfiguration(DataRedisProperties properties,
JedisConnectionConfiguration(Environment environment, DataRedisProperties properties,
ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider,
ObjectProvider<RedisSentinelConfiguration> sentinelConfiguration,
ObjectProvider<RedisClusterConfiguration> clusterConfiguration,
ObjectProvider<RedisStaticMasterReplicaConfiguration> masterReplicaConfiguration,
DataRedisConnectionDetails connectionDetails) {
super(properties, connectionDetails, standaloneConfigurationProvider, sentinelConfiguration,
super(environment, properties, connectionDetails, standaloneConfigurationProvider, sentinelConfiguration,
clusterConfiguration, masterReplicaConfiguration);
}

Expand Down Expand Up @@ -130,7 +132,7 @@ private JedisClientConfigurationBuilder applyProperties(JedisClientConfiguration
PropertyMapper map = PropertyMapper.get();
map.from(getProperties().getTimeout()).to(builder::readTimeout);
map.from(getProperties().getConnectTimeout()).to(builder::connectTimeout);
map.from(getProperties().getClientName()).whenHasText().to(builder::clientName);
map.from(determineClientName()).whenHasText().to(builder::clientName);
return builder;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import org.springframework.boot.thread.Threading;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
Expand All @@ -65,20 +66,21 @@
* @author Moritz Halbritter
* @author Phillip Webb
* @author Scott Frederick
* @author Yanming Zhou
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisClient.class)
@ConditionalOnProperty(name = "spring.data.redis.client-type", havingValue = "lettuce", matchIfMissing = true)
class LettuceConnectionConfiguration extends DataRedisConnectionConfiguration {

LettuceConnectionConfiguration(DataRedisProperties properties,
LettuceConnectionConfiguration(Environment environment, DataRedisProperties properties,
ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider,
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider,
ObjectProvider<RedisStaticMasterReplicaConfiguration> masterReplicaConfiguration,
DataRedisConnectionDetails connectionDetails) {
super(properties, connectionDetails, standaloneConfigurationProvider, sentinelConfigurationProvider,
clusterConfigurationProvider, masterReplicaConfiguration);
super(environment, properties, connectionDetails, standaloneConfigurationProvider,
sentinelConfigurationProvider, clusterConfigurationProvider, masterReplicaConfiguration);
}

@Bean(destroyMethod = "shutdown")
Expand Down Expand Up @@ -183,8 +185,9 @@ private void applyProperties(LettuceClientConfigurationBuilder builder, @Nullabl
builder.readFrom(getReadFrom(readFrom));
}
}
if (StringUtils.hasText(getProperties().getClientName())) {
builder.clientName(getProperties().getClientName());
String clientName = determineClientName();
if (StringUtils.hasText(clientName)) {
builder.clientName(clientName);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
* @author Andy Wilkinson
* @author Phillip Webb
* @author Scott Frederick
* @author Yanming Zhou
*/
@ClassPathExclusions("lettuce-core-*.jar")
class DataRedisAutoConfigurationJedisTests {
Expand Down Expand Up @@ -207,13 +208,19 @@ void testRedisConfigurationWithDefaultTimeouts() {
}

@Test
void testRedisConfigurationWithClientName() {
this.contextRunner.withPropertyValues("spring.data.redis.host:foo", "spring.data.redis.client-name:spring-boot")
.run((context) -> {
JedisConnectionFactory cf = context.getBean(JedisConnectionFactory.class);
assertThat(cf.getHostName()).isEqualTo("foo");
assertThat(cf.getClientName()).isEqualTo("spring-boot");
});
void testRedisConfigurationWithImplicitClientName() {
this.contextRunner.withPropertyValues("spring.application.name:spring-boot").run((context) -> {
JedisConnectionFactory cf = context.getBean(JedisConnectionFactory.class);
assertThat(cf.getClientName()).isEqualTo("spring-boot");
});
}

@Test
void testRedisConfigurationWithExplicitClientName() {
this.contextRunner.withPropertyValues("spring.data.redis.client-name:spring-boot").run((context) -> {
JedisConnectionFactory cf = context.getBean(JedisConnectionFactory.class);
assertThat(cf.getClientName()).isEqualTo("spring-boot");
});
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@
* @author Moritz Halbritter
* @author Andy Wilkinson
* @author Phillip Webb
* @author Yanming Zhou
*/
class DataRedisAutoConfigurationTests {

Expand Down Expand Up @@ -341,13 +342,19 @@ void testRedisConfigurationWithCustomBean() {
}

@Test
void testRedisConfigurationWithClientName() {
this.contextRunner.withPropertyValues("spring.data.redis.host:foo", "spring.data.redis.client-name:spring-boot")
.run((context) -> {
LettuceConnectionFactory cf = context.getBean(LettuceConnectionFactory.class);
assertThat(cf.getHostName()).isEqualTo("foo");
assertThat(cf.getClientName()).isEqualTo("spring-boot");
});
void testRedisConfigurationWithImplicitClientName() {
this.contextRunner.withPropertyValues("spring.application.name:spring-boot").run((context) -> {
LettuceConnectionFactory cf = context.getBean(LettuceConnectionFactory.class);
assertThat(cf.getClientName()).isEqualTo("spring-boot");
});
}

@Test
void testRedisConfigurationWithExplicitClientName() {
this.contextRunner.withPropertyValues("spring.data.redis.client-name:spring-boot").run((context) -> {
LettuceConnectionFactory cf = context.getBean(LettuceConnectionFactory.class);
assertThat(cf.getClientName()).isEqualTo("spring-boot");
});
}

@Test
Expand Down
Loading