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创建了一个[Gradle with Java and Spring Boot 2.1.0 M1 + Web dependency]项目。
2. 按照Spring Session - Spring Boot的说明配置了Spring Session。具体来说:
- 在build.gradle的dependencies块中添加了compile 'org.springframework.session:spring-session-data-redis'
- 通过在application.properties
文件中添加spring.session.store-type=redis
来配置存储类型
- 配置连接属性(在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驱动程序,如何解决这个问题?
spring-boot-starter-data-redis
,这会默认引入一个驱动程序。spring-boot-starter-data-redis
,也没有明确的驱动程序依赖关系。此外,似乎这是一种行为变化 - 我能够在不需要显式驱动程序依赖关系的情况下无缝运行使用 spring-boot 的1.5.16.BUILD-SNAPSHOT
版本的bootRun
。 - Alex Lipovspring-boot-starter-data-redis
依赖隐式地拉取,还是通过添加io.lettuce:lettuce-core
依赖显式地拉取? - Alex Lipov