【问题标题】:Unable to start spring-boot application after configuring spring-session-data-redis配置spring-session-data-redis后无法启动spring-boot应用
【发布时间】:2018-08-08 08:46:08
【问题描述】:

在演示 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创建了一个【Gradle with Java and Spring Boot 2.1.0 M1 + Web依赖】项目。
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.hostspring.redis.passwordspring.redis.port 具有相关值
3.从项目根目录执行./gradlew bootRun,收到上述错误


问题:
1.据我从错误消息中了解到,RedisConnectionFactory 加载失败,因为它既找不到 Jedis 也找不到 Lettuce 驱动程序。 spring-session-data-redis 不应该默认带其中一个驱动程序吗?
2.如果我想使用Jedis驱动,如何解决这个问题?
3. 如果我想使用 Lettuce 驱动,如何解决这个问题?

【问题讨论】:

  • 1. 2 号或 3 号包括他们自己。该示例也使用spring-boot-starter-data-redis,默认情况下会引入驱动程序。
  • @M.Deinum 谢谢。该指南本身没有提到spring-boot-starter-data-redis,也没有明确的驱动程序依赖。此外,这似乎是一种行为改变——我可以使用 spring-boot 的 1.5.16.BUILD-SNAPSHOT 版本完美地运行 bootRun,而无需明确的驱动程序依赖。
  • 指令不正确,与它们链接的示例应用程序不同步。它has a dependency on spring-boot-starter-data-redis.
  • @AndyWilkinson 谢谢。是否有推荐的方法来拉入 Lettuce 驱动程序:隐式添加 spring-boot-starter-data-redis 依赖项,或显式添加 io.lettuce:lettuce-core 依赖项?
  • 我会使用启动器。

标签: spring-boot spring-session


【解决方案1】:

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' 
} 

【讨论】:

    【解决方案2】:

    RedisConnectionFactory 有 2 个实现,都带有 spring-session-data-redis

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

    (2) 绝地

    由于生菜和绝地武士依赖是可选的,你必须有明确的依赖。您可以将依赖项放在其中的任何一个上。 (你可以同时拥有,但 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>
    

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 2018-12-16
      • 2021-01-06
      • 2020-08-04
      • 2015-04-19
      • 2020-04-26
      • 2016-05-31
      • 2019-05-29
      • 2018-06-25
      相关资源
      最近更新 更多