配置spring-session-data-redis后无法启动spring-boot应用程序

时间:2018-08-08 08:46:08

标签: spring-boot spring-session

在演示spring-boot项目中配置spring-session-data-redis后,bootRun任务失败,并显示以下消息:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method redisTemplate in org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration required a bean of type 'org.springframework.data.redis.connection.RedisConnectionFactory' that could not be found.
    - Bean method 'redisConnectionFactory' not loaded because @ConditionalOnClass did not find required classes 'org.apache.commons.pool2.impl.GenericObjectPool', 'redis.clients.jedis.Jedis'
    - Bean method 'redisConnectionFactory' not loaded because @ConditionalOnClass did not find required class 'io.lettuce.core.RedisClient'

Action:

Consider revisiting the entries above or defining a bean of type 'org.springframework.data.redis.connection.RedisConnectionFactory' in your configuration.

我所做的(又称复制步骤):
1.使用Spring Initializr创建一个[带有Java和Spring Boot 2.1.0 M1 + Web依赖的Gradle]项目。
2.按照Spring Session - Spring Boot的说明配置Spring Session。更具体地说:
 -添加了compile 'org.springframework.session:spring-session-data-redis'    build.gradle的依赖项块
 -通过将spring.session.store-type=redis添加到application.properties文件来配置商店类型
 -配置连接    属性(在application.properties文件中):spring.redis.host,    具有相关值的spring.redis.passwordspring.redis.port
3.从项目的根目录执行./gradlew bootRun并收到上述错误


问题:
1.据错误消息所知,RedisConnectionFactory无法加载,因为找不到Jedis或Lettuce驱动程序。 spring-session-data-redis是否应该默认使用其中一个驱动程序?
2.如果我要使用Jedis驱动程序,该如何解决此问题?
3.如果要使用Lettuce驱动程序,如何解决此问题?

2 个答案:

答案 0 :(得分:6)

1。
正如@M.Deinum所述,spring-session-data-redis(版本2.1.0.M1)不会拉Jedis或Lettuce驱动程序。

2。
添加最新的Jedis驱动程序作为显式依赖项:

dependencies {  
    // ...  
    compile 'redis.clients:jedis:2.9.0'  
} 

3。
添加spring-boot-starter-data-redis(引入Lettuce驱动程序)或最新的Lettuce驱动程序作为显式依赖项:

dependencies {  
    // ...  
    compile 'org.springframework.boot:spring-boot-starter-data-redis'  
    // OR
    compile 'io.lettuce:lettuce-core:5.0.5.RELEASE' 
} 

答案 1 :(得分:1)

RedisConnectionFactory附带了2种spring-session-data-redis的实现

(1)生菜(默认)-https://github.com/spring-projects/spring-session/issues/789

(2)杰迪斯

由于生菜和Jedis依赖关系是可选的,因此您必须具有显式依赖关系。您可以将依赖关系放到其中之一。 (您可以同时使用两者,但Spring redis实现状态器将生菜用作默认实现)

示例:

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>x.x.x</version>
    </dependency>
    <dependency>
        <groupId>io.lettuce</groupId>
        <artifactId>lettuce-core</artifactId>
        <version>x.x.x</version>
    </dependency>