From dbb3473d0d04eaa06e173cf07fd85eb9c630183b Mon Sep 17 00:00:00 2001 From: Fu Jian Date: Fri, 9 Sep 2016 14:34:32 +0800 Subject: [PATCH] DATAREDIS-552 - Support client name configuration for JedisConnectionFactory. Motivation: JedisConnectionFactory should support setting clientName for Jedis connections so to improve troubleshooting. Result: Easier to troubleshooting with connection name. Original pull request: #219. --- .../jedis/JedisConnectionFactory.java | 24 +++++++++++++++++-- .../jedis/JedisConnectionFactoryTests.java | 6 +++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java index 8d3fdc38c..901e611fd 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java @@ -56,6 +56,7 @@ import redis.clients.util.Pool; * @author Thomas Darimont * @author Christoph Strobl * @author Mark Paluch + * @author Fu Jian */ public class JedisConnectionFactory implements InitializingBean, DisposableBean, RedisConnectionFactory { @@ -94,6 +95,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, private Pool pool; private JedisPoolConfig poolConfig = new JedisPoolConfig(); private int dbIndex = 0; + private String clientName; private boolean convertPipelineAndTxResults = true; private RedisSentinelConfiguration sentinelConfig; private RedisClusterConfiguration clusterConfig; @@ -248,7 +250,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, protected Pool createRedisSentinelPool(RedisSentinelConfiguration config) { return new JedisSentinelPool(config.getMaster().getName(), convertToJedisSentinelSet(config.getSentinels()), getPoolConfig() != null ? getPoolConfig() : new JedisPoolConfig(), getTimeoutFrom(getShardInfo()), - getShardInfo().getPassword()); + getShardInfo().getPassword(), Protocol.DEFAULT_DATABASE, clientName); } /** @@ -260,7 +262,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, protected Pool createRedisPool() { return new JedisPool(getPoolConfig(), getShardInfo().getHost(), getShardInfo().getPort(), - getTimeoutFrom(getShardInfo()), getShardInfo().getPassword(), useSsl); + getTimeoutFrom(getShardInfo()), getShardInfo().getPassword(), Protocol.DEFAULT_DATABASE, clientName, useSsl); } private JedisCluster createCluster() { @@ -537,6 +539,24 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, Assert.isTrue(index >= 0, "invalid DB index (a positive index required)"); this.dbIndex = index; } + + /** + * Returns the client name. + * + * @return Returns the client name + */ + public String getClientName() { + return clientName; + } + + /** + * Sets the client name used by this connection factory. Default is empty. + * + * @param clientName client name + */ + public void setClientName(String clientName) { + this.clientName = clientName; + } /** * Specifies if pipelined results should be converted to the expected data type. If false, results of diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryTests.java index a67e48986..0392fa749 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryTests.java @@ -39,6 +39,7 @@ public class JedisConnectionFactoryTests { @Before public void setUp() { factory = new JedisConnectionFactory(SENTINEL_CONFIG); + factory.setClientName("clientName"); factory.afterPropertiesSet(); } @@ -54,4 +55,9 @@ public class JedisConnectionFactoryTests { public void shouldSendCommandCorrectlyViaConnectionFactoryUsingSentinel() { assertThat(factory.getConnection().ping(), equalTo("PONG")); } + + @Test + public void getClientNameShouldEqualWithFactorySetting() { + assertThat(factory.getConnection().getClientName(), equalTo("clientName")); + } }