Redis连接失败

3

我希望使用Redis来处理会话。但是当我运行Spring Boot应用程序时,我遇到了故障。所以我猜测这个错误可能来自Maven依赖项,特别是版本冲突。

以下是我的Maven依赖项:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
        <version>1.7.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>io.lettuce</groupId>
        <artifactId>lettuce-core</artifactId>
        <version>5.0.0.RELEASE</version>
    </dependency>
</dependencies>

请注意,我在上面的pom.xml中添加了两个依赖项,它们的artifactId分别为spring-session-data-redislettuce-core。这些依赖项分别负责Redis连接和确保会话连接的线程安全。
当我运行spring boot应用程序时,我收到以下错误:

应用程序启动失败


描述:

尝试调用方法org.springframework.data.redis.connection.RedisConnection.getConfig(Ljava/lang/String;)Ljava/util/List;,但该方法不存在。它的类org.springframework.data.redis.connection.RedisConnection可从以下位置访问:

jar:file:/C:/Users/aoutir/.m2/repository/org/springframework/data/spring-data-redis/2.0.10.RELEASE/spring-data-redis-2.0.10.RELEASE.jar!/org/springframework/data/redis/connection/RedisConnection.class

它是从以下位置加载的:

file:/C:/Users/aoutir/.m2/repository/org/springframework/data/spring-data-redis/2.0.10.RELEASE/spring-data-redis-2.0.10.RELEASE.jar

操作:

更正您的应用程序类路径,以便包含一个兼容的版本org.springframework.data.redis.connection.RedisConnection

如有需要,请随时寻求帮助,感谢您的回复。

3个回答

2

我花了整整一天的时间来解决完全相同的问题。经过一整天的研究和开发,我找到了解决方案。

dependencies {
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.springframework.boot:spring-boot-starter-data-rest')
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.springframework.boot:spring-boot-starter-security')
implementation('org.springframework.boot:spring-boot-starter-data-redis')
implementation('org.springframework.session:spring-session-data-redis')

runtimeOnly('org.springframework.boot:spring-boot-devtools')
testImplementation('org.springframework.boot:spring-boot-starter-test')
runtimeOnly('org.flywaydb:flyway-core')
runtimeOnly('com.h2database:h2')


// runtimeOnly('mysql:mysql-connector-java')

使用 'spring-boot-starter-data-redis' 和 'spring-session-data-redis'。

删除lettuce依赖项,因为它已经包含在'spring-boot-starter-data-redis'中作为依赖项。

以下是您的依赖关系:

<dependencies>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>


我遇到了完全相同的问题。尽管在我的pom中,我已经添加了以下依赖项: org.springframework.session spring-session 1.3.5.RELEASE </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> 有什么想法,发生了什么? - Hasan
你是否已将 lettuce 依赖项移除,因为它已作为 spring-boot-starter-data-redis 的依赖项包含在内了? - TAB

1

只需删除spring-session-data-redis的显式版本,并使用来自spring boot parent pom的版本。

如果你想更改spring-session-data-redis的版本,你必须确保没有任何传递依赖项由parent pom管理。如果我降级到1.3版本(找不到1.7版本),我最终会得到以下版本不匹配情况,这由 mvn -X dependency:tree 显示:

[ESC[1;36mDEBUGESC[m]    org.springframework.session:spring-session-data-redis:jar:1.3.3.RELEASE:compile
[ESC[1;36mDEBUGESC[m]       org.apache.commons:commons-pool2:jar:2.5.0:compile (version managed from 2.4.2)
[ESC[1;36mDEBUGESC[m]       org.springframework.data:spring-data-redis:jar:2.0.10.RELEASE:compile (version managed from 1.7.10.RELEASE)

我遇到了完全相同的问题。虽然在我的POM文件中,我有以下内容: <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> <version>1.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>有任何想法,发生了什么? - Hasan

0
请替换依赖项。
 <dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>1.7.0.RELEASE</version>
 </dependency>

使用

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-redis</artifactId>
</dependency>

版本管理是自动完成的,启动时将初始化 Redis 缓存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接