java - Spring Boot Redis 在 dockerized 时出错,但在 maven 运行时不会出错

标签 java spring-boot docker redis maven-plugin

我正在使用 Redis(使用 redisson)通过 Spring Boot 构建一个应用程序。

当我在开发模式下运行我的应用程序时,它工作正常,但是当我尝试在 Docker 容器中运行它时,它会失败并出现错误

java.lang.ClassNotFoundException:org.springframework.data.redis.connection.ReactiveStreamCommands

我的 Redis Maven 配置:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
             <groupId>org.redisson</groupId>
             <!-- for Spring Data Redis v.2.2.x -->
             <artifactId>redisson-spring-data-22</artifactId>
             <version>3.12.2</version>
        </dependency>

我的 Maven 配置来构建 docker 容器:

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.1</version>
                <dependencies>
                    <dependency>
                        <groupId>javax.activation</groupId>
                        <artifactId>activation</artifactId>
                        <version>1.1.1</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <imageName>${imageName}</imageName>

                    <!-- default properties to tag an image -->
                    <image>${imageName}</image>
                    <newName>${imageName}:${tagName}</newName>

                    <!-- gitlab registry -->
                    <serverId>gitlab-repository</serverId>
                    <registryUrl>my.repository</registryUrl>

                    <baseImage>adoptopenjdk/openjdk11-openj9:latest</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>

                    <!-- copy the service's jar file from target into the root directory 
                        of the image -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

当我登录到我的容器并分析我的 jar 库时(使用以下命令):

jar -tf my-app.jar | grep redis

我发现这个:

BOOT-INF/lib/spring-boot-starter-data-redis-2.1.3.RELEASE.jar
BOOT-INF/lib/spring-data-redis-2.1.5.RELEASE.jar
BOOT-INF/lib/redisson-spring-data-22-3.12.2.jar
BOOT-INF/lib/redisson-3.12.2.jar

这与我使用 jar 进行开发时得到的结果完全相同。

这是关于如何启动 redis 的 docker-compose 摘录:

  redis:
    image: redis:5.0
    ports:
      - 6379:6379
    networks:
      - network
    volumes:
      - redis:/data
    entrypoint: redis-server --appendonly yes 
    restart: unless-stopped

关于我的容器正常运行缺少什么的任何线索? 知道为什么 jar 中使用的 spring-data-redis 是 2.1.5 而不是 2.2.x 吗? 提前致谢

最佳答案

我找到了解决方案:

我没有使用redisson-spring-data-22,而是降级到redisson-spring-data-16(因为我注意到spring-data的有效版本-使用的redis实际上是2.1.5,低于2.2...)。

我无法解释为什么,但它现在可以工作了

我在 redisson-spring-data 上找不到任何轨道在什么条件下应该使用什么版本,所以我只是尝试了另一个版本......并且它有效!

希望有帮助。

关于java - Spring Boot Redis 在 dockerized 时出错,但在 maven 运行时不会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61118910/

相关文章:

java - 如何消除3维java数组中的数组项

java - this == null in java ,之后还执行为什么继续?

bash - Docker-如何从同一主机的一个容器调用bash命令到另一个容器?

docker - 即使标签存在,在 docker composer 上也找不到 list

java - 为什么我收到错误 'illegal start of type'

Java、Swing、sql-我可以将文本字段中输入的值与数据库中的两列相匹配吗

spring-boot - spring 库是否有 EOL(生命周期结束)和 EOVS(供应商支持结束)日期?

java - Spring Boot 1.4 : Spring Data Cassandra 1. 4.2 与 Cassandra 3.0 不兼容?

java - 来自外部依赖的 Spring Boot 自动配置顺序

Docker 从 overlay 迁移到 overlay2