Skip to content

Commit 4d3af33

Browse files
committed
Redis sentinel should respect database in url also
Database property should be ignored if url is used. Signed-off-by: Yanming Zhou <[email protected]>
1 parent 5f71576 commit 4d3af33

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/PropertiesRedisConnectionDetails.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ public Standalone getStandalone() {
6060
if (this.properties.getUrl() != null) {
6161
ConnectionInfo connectionInfo = ConnectionInfo.of(this.properties.getUrl());
6262
return Standalone.of(connectionInfo.getUri().getHost(), connectionInfo.getUri().getPort(),
63-
(connectionInfo.getDatabase() != null) ? connectionInfo.getDatabase()
64-
: this.properties.getDatabase());
63+
connectionInfo.getDatabase());
6564
}
6665
return Standalone.of(this.properties.getHost(), this.properties.getPort(), this.properties.getDatabase());
6766
}
@@ -77,7 +76,7 @@ public Sentinel getSentinel() {
7776

7877
@Override
7978
public int getDatabase() {
80-
return PropertiesRedisConnectionDetails.this.properties.getDatabase();
79+
return getStandalone().getDatabase();
8180
}
8281

8382
@Override

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisConnectionConfiguration.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,9 @@ static final class ConnectionInfo {
191191

192192
private final String password;
193193

194-
private final Integer database;
194+
private final int database;
195195

196-
private ConnectionInfo(URI uri, boolean useSsl, String username, String password, Integer database) {
196+
private ConnectionInfo(URI uri, boolean useSsl, String username, String password, int database) {
197197
this.uri = uri;
198198
this.useSsl = useSsl;
199199
this.username = username;
@@ -217,7 +217,7 @@ String getPassword() {
217217
return this.password;
218218
}
219219

220-
Integer getDatabase() {
220+
int getDatabase() {
221221
return this.database;
222222
}
223223

@@ -242,7 +242,7 @@ static ConnectionInfo of(String url) {
242242
password = candidate;
243243
}
244244
}
245-
Integer database = null;
245+
int database = 0;
246246
if (StringUtils.hasText(uri.getPath())) {
247247
String[] pathSplit = uri.getPath().split("/", 2);
248248
if (pathSplit.length > 1 && !pathSplit[1].isEmpty()) {

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/PropertiesRedisConnectionDetailsTests.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ void standaloneIsConfiguredFromUrlWithoutDatabase() {
114114
RedisConnectionDetails.Standalone standalone = connectionDetails.getStandalone();
115115
assertThat(standalone.getHost()).isEqualTo("example.com");
116116
assertThat(standalone.getPort()).isEqualTo(1234);
117-
assertThat(standalone.getDatabase()).isEqualTo(5);
117+
assertThat(standalone.getDatabase()).isEqualTo(0);
118118
}
119119

120120
@Test
@@ -144,9 +144,22 @@ void sentinelIsConfigured() {
144144
RedisProperties.Sentinel sentinel = new RedisProperties.Sentinel();
145145
sentinel.setNodes(List.of("localhost:1111", "127.0.0.1:2222", "[::1]:3333"));
146146
this.properties.setSentinel(sentinel);
147+
this.properties.setDatabase(5);
147148
PropertiesRedisConnectionDetails connectionDetails = new PropertiesRedisConnectionDetails(this.properties);
148149
assertThat(connectionDetails.getSentinel().getNodes()).containsExactly(new Node("localhost", 1111),
149150
new Node("127.0.0.1", 2222), new Node("[::1]", 3333));
151+
assertThat(connectionDetails.getSentinel().getDatabase()).isEqualTo(5);
152+
}
153+
154+
@Test
155+
void sentinelDatabaseIsConfiguredFromUrl() {
156+
RedisProperties.Sentinel sentinel = new RedisProperties.Sentinel();
157+
sentinel.setNodes(List.of("localhost:1111", "127.0.0.1:2222", "[::1]:3333"));
158+
this.properties.setSentinel(sentinel);
159+
this.properties.setUrl("redis://example.com:1234/9999");
160+
this.properties.setDatabase(5);
161+
PropertiesRedisConnectionDetails connectionDetails = new PropertiesRedisConnectionDetails(this.properties);
162+
assertThat(connectionDetails.getSentinel().getDatabase()).isEqualTo(9999);
150163
}
151164

152165
}

0 commit comments

Comments
 (0)