diff --git a/spring-boot-actuator/pom.xml b/spring-boot-actuator/pom.xml
index 11f8d6cfb72..3eb06c8c7a2 100644
--- a/spring-boot-actuator/pom.xml
+++ b/spring-boot-actuator/pom.xml
@@ -244,11 +244,6 @@
jedis
true
-
- io.lettuce
- lettuce-core
- true
-
org.springframework.amqp
spring-rabbit
diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml
index b5d5be58399..6bbd95a1ded 100755
--- a/spring-boot-autoconfigure/pom.xml
+++ b/spring-boot-autoconfigure/pom.xml
@@ -100,6 +100,11 @@
de.flapdoodle.embed.mongo
true
+
+ io.lettuce
+ lettuce-core
+ true
+
io.projectreactor.ipc
reactor-netty
@@ -481,11 +486,6 @@
jedis
true
-
- io.lettuce
- lettuce-core
- true
-
org.liquibase
liquibase-core
diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java
new file mode 100644
index 00000000000..27b13810a70
--- /dev/null
+++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/JedisConnectionConfiguration.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.autoconfigure.data.redis;
+
+import java.net.UnknownHostException;
+
+import org.apache.commons.pool2.impl.GenericObjectPool;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPoolConfig;
+
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+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.jedis.JedisConnection;
+import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
+import org.springframework.util.StringUtils;
+
+/**
+ * Redis connection configuration using Jedis.
+ *
+ * @author Mark Paluch
+ * @author Stephane Nicoll
+ */
+@Configuration
+@ConditionalOnClass({ GenericObjectPool.class, JedisConnection.class, Jedis.class })
+class JedisConnectionConfiguration extends RedisConnectionConfiguration {
+
+ private final RedisProperties properties;
+
+ JedisConnectionConfiguration(RedisProperties properties,
+ ObjectProvider sentinelConfiguration,
+ ObjectProvider clusterConfiguration) {
+ super(properties, sentinelConfiguration, clusterConfiguration);
+ this.properties = properties;
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(RedisConnectionFactory.class)
+ public JedisConnectionFactory redisConnectionFactory() throws UnknownHostException {
+ return applyProperties(createJedisConnectionFactory());
+ }
+
+ private JedisConnectionFactory applyProperties(JedisConnectionFactory factory) {
+ configureConnection(factory);
+ if (this.properties.isSsl()) {
+ factory.setUseSsl(true);
+ }
+ factory.setDatabase(this.properties.getDatabase());
+ if (this.properties.getTimeout() > 0) {
+ factory.setTimeout(this.properties.getTimeout());
+ }
+ return factory;
+ }
+
+ private void configureConnection(JedisConnectionFactory factory) {
+ if (StringUtils.hasText(this.properties.getUrl())) {
+ configureConnectionFromUrl(factory);
+ }
+ else {
+ factory.setHostName(this.properties.getHost());
+ factory.setPort(this.properties.getPort());
+ if (this.properties.getPassword() != null) {
+ factory.setPassword(this.properties.getPassword());
+ }
+ }
+ }
+
+ private void configureConnectionFromUrl(JedisConnectionFactory factory) {
+ ConnectionInfo connectionInfo = parseUrl(this.properties.getUrl());
+ factory.setUseSsl(connectionInfo.isUseSsl());
+ factory.setHostName(connectionInfo.getHostName());
+ factory.setPort(connectionInfo.getPort());
+ if (connectionInfo.getPassword() != null) {
+ factory.setPassword(connectionInfo.getPassword());
+ }
+ }
+
+ private JedisConnectionFactory createJedisConnectionFactory() {
+ RedisProperties.Pool pool = this.properties.getJedis().getPool();
+ JedisPoolConfig poolConfig = pool != null
+ ? jedisPoolConfig(pool) : new JedisPoolConfig();
+
+ if (getSentinelConfig() != null) {
+ return new JedisConnectionFactory(getSentinelConfig(), poolConfig);
+ }
+ if (getClusterConfiguration() != null) {
+ return new JedisConnectionFactory(getClusterConfiguration(), poolConfig);
+ }
+ return new JedisConnectionFactory(poolConfig);
+ }
+
+ private JedisPoolConfig jedisPoolConfig(RedisProperties.Pool pool) {
+ JedisPoolConfig config = new JedisPoolConfig();
+ config.setMaxTotal(pool.getMaxActive());
+ config.setMaxIdle(pool.getMaxIdle());
+ config.setMinIdle(pool.getMinIdle());
+ config.setMaxWaitMillis(pool.getMaxWait());
+ return config;
+ }
+
+}
diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java
new file mode 100644
index 00000000000..d052b3ff134
--- /dev/null
+++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.autoconfigure.data.redis;
+
+import java.net.UnknownHostException;
+
+import io.lettuce.core.RedisClient;
+import io.lettuce.core.cluster.RedisClusterClient;
+import io.lettuce.core.resource.ClientResources;
+import io.lettuce.core.resource.DefaultClientResources;
+import org.apache.commons.pool2.impl.GenericObjectPool;
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
+
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+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.lettuce.DefaultLettucePool;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.util.StringUtils;
+
+/**
+ * Redis connection configuration using Lettuce.
+ *
+ * @author Mark Paluch
+ */
+@Configuration
+@ConditionalOnClass({ GenericObjectPool.class, RedisClient.class, RedisClusterClient.class })
+class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
+
+ private final RedisProperties properties;
+
+ LettuceConnectionConfiguration(RedisProperties properties,
+ ObjectProvider sentinelConfigurationProvider,
+ ObjectProvider clusterConfigurationProvider) {
+ super(properties, sentinelConfigurationProvider, clusterConfigurationProvider);
+ this.properties = properties;
+ }
+
+ @Bean(destroyMethod = "shutdown")
+ @ConditionalOnMissingBean(ClientResources.class)
+ public DefaultClientResources lettuceClientResources() {
+ return DefaultClientResources.create();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(RedisConnectionFactory.class)
+ public LettuceConnectionFactory redisConnectionFactory(
+ ClientResources clientResources) throws UnknownHostException {
+ return applyProperties(createLettuceConnectionFactory(clientResources));
+ }
+
+ private LettuceConnectionFactory applyProperties(LettuceConnectionFactory factory) {
+ configureConnection(factory);
+ if (this.properties.isSsl()) {
+ factory.setUseSsl(true);
+ }
+ if (this.properties.getLettuce() != null) {
+ RedisProperties.Lettuce lettuce = this.properties.getLettuce();
+ if (lettuce.getShutdownTimeout() >= 0) {
+ factory.setShutdownTimeout(
+ this.properties.getLettuce().getShutdownTimeout());
+ }
+ }
+ return factory;
+ }
+
+ private void configureConnection(LettuceConnectionFactory factory) {
+ if (StringUtils.hasText(this.properties.getUrl())) {
+ configureConnectionFromUrl(factory);
+ }
+ else {
+ factory.setHostName(this.properties.getHost());
+ factory.setPort(this.properties.getPort());
+ if (this.properties.getPassword() != null) {
+ factory.setPassword(this.properties.getPassword());
+ }
+ factory.setDatabase(this.properties.getDatabase());
+ if (this.properties.getTimeout() > 0) {
+ factory.setTimeout(this.properties.getTimeout());
+ }
+ }
+ }
+
+ private void configureConnectionFromUrl(LettuceConnectionFactory factory) {
+ ConnectionInfo connectionInfo = parseUrl(this.properties.getUrl());
+ factory.setUseSsl(connectionInfo.isUseSsl());
+ factory.setHostName(connectionInfo.getHostName());
+ factory.setPort(connectionInfo.getPort());
+ if (connectionInfo.getPassword() != null) {
+ factory.setPassword(connectionInfo.getPassword());
+ }
+ }
+
+ private DefaultLettucePool applyProperties(DefaultLettucePool pool) {
+ if (StringUtils.hasText(this.properties.getUrl())) {
+ configureConnectionFromUrl(pool);
+ }
+ else {
+ pool.setHostName(this.properties.getHost());
+ pool.setPort(this.properties.getPort());
+ if (this.properties.getPassword() != null) {
+ pool.setPassword(this.properties.getPassword());
+ }
+ pool.setDatabase(this.properties.getDatabase());
+ }
+ if (this.properties.getTimeout() > 0) {
+ pool.setTimeout(this.properties.getTimeout());
+ }
+ pool.afterPropertiesSet();
+ return pool;
+ }
+
+ private void configureConnectionFromUrl(DefaultLettucePool lettucePool) {
+ ConnectionInfo connectionInfo = parseUrl(this.properties.getUrl());
+ lettucePool.setHostName(connectionInfo.getHostName());
+ lettucePool.setPort(connectionInfo.getPort());
+ if (connectionInfo.getPassword() != null) {
+ lettucePool.setPassword(connectionInfo.getPassword());
+ }
+ }
+
+ private LettuceConnectionFactory createLettuceConnectionFactory(
+ ClientResources clientResources) {
+
+ if (getSentinelConfig() != null) {
+ if (this.properties.getLettuce() != null
+ && this.properties.getLettuce().getPool() != null) {
+ DefaultLettucePool lettucePool = new DefaultLettucePool(
+ getSentinelConfig());
+ return new LettuceConnectionFactory(applyProperties(
+ applyClientResources(lettucePool, clientResources)));
+ }
+ return applyClientResources(
+ new LettuceConnectionFactory(getSentinelConfig()),
+ clientResources);
+ }
+
+ if (getClusterConfiguration() != null) {
+ return applyClientResources(
+ new LettuceConnectionFactory(getClusterConfiguration()),
+ clientResources);
+ }
+
+ if (this.properties.getLettuce() != null
+ && this.properties.getLettuce().getPool() != null) {
+ GenericObjectPoolConfig config = lettucePoolConfig(
+ this.properties.getLettuce().getPool());
+ DefaultLettucePool lettucePool = new DefaultLettucePool(
+ this.properties.getHost(), this.properties.getPort(), config);
+ return new LettuceConnectionFactory(applyProperties(
+ applyClientResources(lettucePool, clientResources)));
+ }
+
+ return applyClientResources(new LettuceConnectionFactory(), clientResources);
+ }
+
+ private DefaultLettucePool applyClientResources(DefaultLettucePool lettucePool,
+ ClientResources clientResources) {
+ lettucePool.setClientResources(clientResources);
+ return lettucePool;
+ }
+
+ private LettuceConnectionFactory applyClientResources(
+ LettuceConnectionFactory factory, ClientResources clientResources) {
+ factory.setClientResources(clientResources);
+ return factory;
+ }
+
+ private GenericObjectPoolConfig lettucePoolConfig(RedisProperties.Pool props) {
+ GenericObjectPoolConfig config = new GenericObjectPoolConfig();
+ config.setMaxTotal(props.getMaxActive());
+ config.setMaxIdle(props.getMaxIdle());
+ config.setMinIdle(props.getMinIdle());
+ config.setMaxWaitMillis(props.getMaxWait());
+ return config;
+ }
+
+}
diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration.java
index e19139a5f0a..629cf2d3811 100644
--- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration.java
+++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration.java
@@ -16,44 +16,19 @@
package org.springframework.boot.autoconfigure.data.redis;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.List;
-import io.lettuce.core.RedisClient;
-import io.lettuce.core.cluster.RedisClusterClient;
-import io.lettuce.core.resource.ClientResources;
-import io.lettuce.core.resource.DefaultClientResources;
-import org.apache.commons.pool2.impl.GenericObjectPool;
-import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
-import redis.clients.jedis.Jedis;
-import redis.clients.jedis.JedisPoolConfig;
-
-import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Cluster;
-import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Lettuce;
-import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisClusterConfiguration;
+import org.springframework.context.annotation.Import;
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.jedis.JedisConnection;
-import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
-import org.springframework.data.redis.connection.lettuce.DefaultLettucePool;
-import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
/**
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Redis support.
@@ -71,393 +46,28 @@ import org.springframework.util.StringUtils;
@Configuration
@ConditionalOnClass({ RedisOperations.class })
@EnableConfigurationProperties(RedisProperties.class)
+@Import({ LettuceConnectionConfiguration.class,
+ JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
- /**
- * Jedis Redis connection configuration.
- */
- @Configuration
- @ConditionalOnClass({ GenericObjectPool.class, JedisConnection.class, Jedis.class })
- protected static class JedisRedisConnectionConfiguration
- extends RedisBaseConfiguration {
-
- private final RedisProperties properties;
-
- public JedisRedisConnectionConfiguration(RedisProperties properties,
- ObjectProvider sentinelConfiguration,
- ObjectProvider clusterConfiguration) {
- super(properties, sentinelConfiguration, clusterConfiguration);
- this.properties = properties;
- }
-
- @Bean
- @ConditionalOnMissingBean(RedisConnectionFactory.class)
- public JedisConnectionFactory redisConnectionFactory()
- throws UnknownHostException {
- return applyProperties(createJedisConnectionFactory());
- }
-
- protected final JedisConnectionFactory applyProperties(
- JedisConnectionFactory factory) {
- configureConnection(factory);
- if (this.properties.isSsl()) {
- factory.setUseSsl(true);
- }
- factory.setDatabase(this.properties.getDatabase());
- if (this.properties.getTimeout() > 0) {
- factory.setTimeout(this.properties.getTimeout());
- }
- return factory;
- }
-
- private void configureConnection(JedisConnectionFactory factory) {
- if (StringUtils.hasText(this.properties.getUrl())) {
- configureConnectionFromUrl(factory);
- }
- else {
- factory.setHostName(this.properties.getHost());
- factory.setPort(this.properties.getPort());
- if (this.properties.getPassword() != null) {
- factory.setPassword(this.properties.getPassword());
- }
- }
- }
-
- private void configureConnectionFromUrl(JedisConnectionFactory factory) {
- String url = this.properties.getUrl();
- if (url.startsWith("rediss://")) {
- factory.setUseSsl(true);
- }
- try {
- URI uri = new URI(url);
- factory.setHostName(uri.getHost());
- factory.setPort(uri.getPort());
- if (uri.getUserInfo() != null) {
- String password = uri.getUserInfo();
- int index = password.lastIndexOf(":");
- if (index >= 0) {
- password = password.substring(index + 1);
- }
- factory.setPassword(password);
- }
- }
- catch (URISyntaxException ex) {
- throw new IllegalArgumentException("Malformed 'spring.redis.url' " + url,
- ex);
- }
- }
-
- private JedisConnectionFactory createJedisConnectionFactory() {
- JedisPoolConfig poolConfig = this.properties.getPool() != null
- ? jedisPoolConfig() : new JedisPoolConfig();
-
- if (getSentinelConfig() != null) {
- return new JedisConnectionFactory(getSentinelConfig(), poolConfig);
- }
- if (getClusterConfiguration() != null) {
- return new JedisConnectionFactory(getClusterConfiguration(), poolConfig);
- }
- return new JedisConnectionFactory(poolConfig);
- }
-
- private JedisPoolConfig jedisPoolConfig() {
- JedisPoolConfig config = new JedisPoolConfig();
- RedisProperties.Pool props = this.properties.getPool();
- config.setMaxTotal(props.getMaxActive());
- config.setMaxIdle(props.getMaxIdle());
- config.setMinIdle(props.getMinIdle());
- config.setMaxWaitMillis(props.getMaxWait());
- return config;
- }
-
+ @Bean
+ @ConditionalOnMissingBean(name = "redisTemplate")
+ public RedisTemplate
-
- io.lettuce
- lettuce-core
- ${lettuce.version}
-
ch.qos.logback
logback-access
@@ -831,6 +825,11 @@
metrics-servlets
${dropwizard-metrics.version}
+
+ io.lettuce
+ lettuce-core
+ ${lettuce.version}
+
io.netty
netty-bom
@@ -2338,11 +2337,6 @@
jedis
${jedis.version}
-
- io.lettuce
- lettuce-core
- ${lettuce.version}
-
wsdl4j
wsdl4j
diff --git a/spring-boot-docs/pom.xml b/spring-boot-docs/pom.xml
index 94fb2746e71..564a47d8f7b 100644
--- a/spring-boot-docs/pom.xml
+++ b/spring-boot-docs/pom.xml
@@ -172,6 +172,11 @@
metrics-core
true
+
+ io.lettuce
+ lettuce-core
+ true
+
io.projectreactor.ipc
reactor-netty
@@ -748,11 +753,6 @@
jedis
true
-
- io.lettuce
- lettuce-core
- true
-
org.springframework.boot
diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc
index 0d40b09b2f0..0d3c57fac00 100644
--- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc
+++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc
@@ -850,38 +850,28 @@ content into your application; rather pick only the properties that you need.
spring.redis.database=0 # Database index used by the connection factory.
spring.redis.url= # Connection URL, will override host, port and password (user will be ignored), e.g. redis://user:password@example.com:6379
spring.redis.host=localhost # Redis server host.
- spring.redis.password= # Login password of the redis server.
- spring.redis.ssl=false # Enable SSL support.
spring.redis.jedis.pool.max-active=8 # Max number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.
spring.redis.jedis.pool.max-idle=8 # Max number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections.
spring.redis.jedis.pool.max-wait=-1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
spring.redis.jedis.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.
- spring.redis.port=6379 # Redis server port.
- spring.redis.sentinel.master= # Name of Redis server.
- spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs.
- spring.redis.timeout=0 # Connection timeout in milliseconds.
- spring.redis.ssl.enabled=false # Enable SSL support.
- spring.redis.ssl.verify-peer=true # Enable SSL peer verification.
- spring.redis.ssl.start-tls=false # Enable StartTLS support.
-
- # REDIS JEDIS DRIVER
- spring.redis.jedis.pool.max-active=8 # Max number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.
- spring.redis.jedis.pool.max-idle=8 # Max number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections.
- spring.redis.jedis.pool.max-wait=-1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
- spring.redis.jedis.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.
-
- # REDIS LETTUCE DRIVER
spring.redis.lettuce.pool.max-active=8 # Max number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.
spring.redis.lettuce.pool.max-idle=8 # Max number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections.
spring.redis.lettuce.pool.max-wait=-1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
spring.redis.lettuce.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.
spring.redis.lettuce.shutdown-timeout=2000 # Shutdown timeout in milliseconds.
-
+ spring.redis.password= # Login password of the redis server.
+ spring.redis.port=6379 # Redis server port.
+ spring.redis.sentinel.master= # Name of Redis server.
+ spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs.
+ spring.redis.ssl=false # Enable SSL support.
+ spring.redis.timeout=0 # Connection timeout in milliseconds.
# TRANSACTION ({sc-spring-boot-autoconfigure}/transaction/TransactionProperties.{sc-ext}[TransactionProperties])
spring.transaction.default-timeout= # Default transaction timeout in seconds.
spring.transaction.rollback-on-commit-failure= # Perform the rollback on commit failures.
+
+
# ----------------------------------------
# INTEGRATION PROPERTIES
# ----------------------------------------
diff --git a/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-docs/src/main/asciidoc/howto.adoc
index e05e2b95cbe..46b8627de39 100644
--- a/spring-boot-docs/src/main/asciidoc/howto.adoc
+++ b/spring-boot-docs/src/main/asciidoc/howto.adoc
@@ -3075,12 +3075,14 @@ In this example we are using a single application context (the one created by th
listener) and attaching it to the `DispatcherServlet` using an init parameter. This is
normal in a Spring Boot application (you normally only have one application context).
+
+
[[howto-use-lettuce-instead-of-jedis]]
=== Use Lettuce instead of Jedis
-The Spring Boot Redis starter (`spring-boot-starter-data-redis` in particular) uses
+The Spring Boot starter (`spring-boot-starter-data-redis`) uses
https://github.com/xetorthio/jedis/[Jedis] by default. You need to exclude that dependency
-and include the https://github.com/lettuce-io/lettuce-core/[Lettuce] one instead. Spring Boot provides a managed dependency
-to help make this process as easy as possible.
+and include the https://github.com/lettuce-io/lettuce-core/[Lettuce] one instead. Spring
+Boot manages that dependency to help make this process as easy as possible.
Example in Maven:
@@ -3114,4 +3116,4 @@ Example in Gradle:
compile("io.lettuce:lettuce-core:{lettuce.version}")
// ...
}
-----
\ No newline at end of file
+----