配置spring-session-data-redis后无法启动spring-boot应用
Unable to start spring-boot application after configuring spring-session-data-redis
在演示 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.
我所做的(a.k.a。重现步骤):
1. 使用 Spring Initializr 创建一个 [Gradle with Java and Spring Boot 2.1.0 M1 + Web dependency] 项目。
2. 按照 Spring Session - Spring Boot 说明配置 Spring 会话。更具体地说:
- 添加 compile 'org.springframework.session:spring-session-data-redis'
到 build.gradle 的依赖块
- 通过将 spring.session.store-type=redis
添加到 application.properties
文件
来配置商店类型
- 配置连接
属性(在 application.properties
文件中):spring.redis.host
,
spring.redis.password
和 spring.redis.port
具有相关值
3.从项目的根目录执行./gradlew bootRun
,收到上面的错误
问题:
1.据我从错误消息中了解到,RedisConnectionFactory
加载失败,因为它既找不到Jedis也找不到Lettuce驱动程序。默认情况下 spring-session-data-redis
不应该带其中一个驱动程序吗?
2.如果我想使用Jedis驱动怎么解决这个问题?
3. 如果我想使用 Lettuce 驱动程序,如何解决这个问题?
1.
正如 提到的,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'
}
有 2 个 RedisConnectionFactory
的实现是 spring-session-data-redis
(1) 生菜(默认)- https://github.com/spring-projects/spring-session/issues/789
(2) 绝地
由于 lettuce 和 Jedis 依赖项是可选的,因此您必须具有显式依赖项。你可以依赖其中任何一个。 (你可以同时拥有两者,但 Spring redis 实现 stater 使用 lettuce 作为默认实现)
示例:
<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>
在演示 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.
我所做的(a.k.a。重现步骤):
1. 使用 Spring Initializr 创建一个 [Gradle with Java and Spring Boot 2.1.0 M1 + Web dependency] 项目。
2. 按照 Spring Session - Spring Boot 说明配置 Spring 会话。更具体地说:
- 添加 compile 'org.springframework.session:spring-session-data-redis'
到 build.gradle 的依赖块
- 通过将 spring.session.store-type=redis
添加到 application.properties
文件
来配置商店类型
- 配置连接
属性(在 application.properties
文件中):spring.redis.host
,
spring.redis.password
和 spring.redis.port
具有相关值
3.从项目的根目录执行./gradlew bootRun
,收到上面的错误
问题:
1.据我从错误消息中了解到,RedisConnectionFactory
加载失败,因为它既找不到Jedis也找不到Lettuce驱动程序。默认情况下 spring-session-data-redis
不应该带其中一个驱动程序吗?
2.如果我想使用Jedis驱动怎么解决这个问题?
3. 如果我想使用 Lettuce 驱动程序,如何解决这个问题?
1.
正如 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'
}
有 2 个 RedisConnectionFactory
的实现是 spring-session-data-redis
(1) 生菜(默认)- https://github.com/spring-projects/spring-session/issues/789
(2) 绝地
由于 lettuce 和 Jedis 依赖项是可选的,因此您必须具有显式依赖项。你可以依赖其中任何一个。 (你可以同时拥有两者,但 Spring redis 实现 stater 使用 lettuce 作为默认实现)
示例:
<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>