SpringBoot 3 与 Spring Cloud Vault 3.1.1 运行时错误 java.lang.NoClassDefFoundError: org/apache/hc/client5/http/classic/HttpClient

Sha*_*bbi 2 java spring-boot spring-cloud-vault-config spring-webflux

当 spring.config.import:Vault:// set 时,Spring-boot 3 中的应用程序无法启动。\n出现以下错误:

\n
16:54:21.649 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed\njava.lang.NoClassDefFoundError: org/apache/hc/client5/http/classic/HttpClient\n
Run Code Online (Sandbox Code Playgroud)\n

描述:

\n
    \n
  • 春季启动3
  • \n
  • JDK 19
  • \n
\n

环境状态:

\n
JAVA_HOME: /Users/USER/Library/jdk-19.0.1.jdk/Contents/Home\n
Run Code Online (Sandbox Code Playgroud)\n

Java版本:

\n
\xe2\x9d\xaf java --version\nopenjdk 19.0.1 2022-10-\nOpenJDK Runtime Environment (build 19.0.1+10\nOpenJDK 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)\n
Run Code Online (Sandbox Code Playgroud)\n

应用程序.yml:

\n
spring:\n  config:\n    import: vault://\n\nspring.cloud.vault:\n  enabled: true\n  application-name: APP\n  host: ${VAULT_HOST}\n  port: 8200\n  scheme: https\n  namespace: admin\n  fail-fast: true\n  config:\n    lifecycle:\n      enabled: true\n      min-renewal: 10s\n      expiry-threshold: 1m\n  authentication: APPROLE\n  app-role:\n    role-id: ${VAULT_ROLE_ID}\n    secret-id: ${VAULT_SECRET_ID}\n    role: ${VAULT_ROLE}\n    app-role-path: approle\n
Run Code Online (Sandbox Code Playgroud)\n

pom.xml:

\n
<?xml version="1.0" encoding="UTF-8"?>\n<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>3.0.0</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n    <groupId>com.example.newSpring</groupId>\n    <artifactId>demo</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>demo</name>\n    <description>Demo project for Spring Boot</description>\n    <properties>\n        <java.version>19</java.version>\n    </properties>\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-vault-config</artifactId>\n            <version>3.1.1</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-webflux</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>io.projectreactor</groupId>\n            <artifactId>reactor-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n\n    </dependencies>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n            </plugin>\n        </plugins>\n    </build>\n</project>\n
Run Code Online (Sandbox Code Playgroud)\n

笔记

\n
    \n
  • 当我使用 Spring Boot 3 运行应用程序并注释 spring.config.import:Vault:// 应用程序启动
  • \n
  • 当我使用 Spring Boot 2.xy 运行应用程序时,应用程序启动
  • \n
\n

meg*_*off 6

对于 Spring Boot 3,我必须添加以下 Maven 依赖项。之后我的旧迁移代码就可以工作了。

<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)