从 spring-boot 项目中删除 JPA 后,为什么我会收到 FlywayMigrationScriptMissingFailureAnalyzer 的 CNFE 和 CannotGetJdbcConnectionException

问题描述 投票:0回答:1

我有一个 Spring Boot 项目,我想删除 JPA。但是,执行此操作后,我在启动时看到以下内容

java.lang.ClassNotFoundException: org.springframework.boot.autoconfigure.flyway.FlywayMigrationScriptMissingFailureAnalyzer
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]
        at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
        at java.base/java.lang.Class.forName(Class.java:534) ~[na:na]
        at java.base/java.lang.Class.forName(Class.java:513) ~[na:na]
        at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:224) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:206) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.boot.diagnostics.FailureAnalyzers.loadFailureAnalyzers(FailureAnalyzers.java:69) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.diagnostics.FailureAnalyzers.<init>(FailureAnalyzers.java:64) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.diagnostics.FailureAnalyzers.<init>(FailureAnalyzers.java:58) ~[spring-boot-3.2.1.jar:3.2.1]
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[na:na]
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[na:na]
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[na:na]
        at org.springframework.core.io.support.SpringFactoriesLoader$FactoryInstantiator.instantiate(SpringFactoriesLoader.java:382) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:228) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:206) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:160) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:491) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.SpringApplication.getExceptionReporters(SpringApplication.java:835) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:819) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:347) ~[spring-boot-3.2.1.jar:3.2.1]
        at com.cbusha.be.BackendApplication.main(BackendApplication.java:24) ~[main/:na]

2024-03-24T11:52:15.124-04:00 TRACE 9108 --- [cbusha-be] [           main] o.s.boot.diagnostics.FailureAnalyzers    : Unable to instantiate factory class [org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer] for factory type [org.springframework.boot.diagnostics.FailureAnalyzer]

java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException
        at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) ~[na:na]
        at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3549) ~[na:na]
        at java.base/java.lang.Class.getConstructors(Class.java:2227) ~[na:na]
        at org.springframework.core.io.support.SpringFactoriesLoader$FactoryInstantiator.findConstructor(SpringFactoriesLoader.java:405) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader$FactoryInstantiator.forClass(SpringFactoriesLoader.java:394) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:227) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:206) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.boot.diagnostics.FailureAnalyzers.loadFailureAnalyzers(FailureAnalyzers.java:69) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.diagnostics.FailureAnalyzers.<init>(FailureAnalyzers.java:64) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.diagnostics.FailureAnalyzers.<init>(FailureAnalyzers.java:58) ~[spring-boot-3.2.1.jar:3.2.1]
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[na:na]
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[na:na]
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[na:na]
        at org.springframework.core.io.support.SpringFactoriesLoader$FactoryInstantiator.instantiate(SpringFactoriesLoader.java:382) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:228) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:206) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:160) ~[spring-core-6.1.2.jar:6.1.2]
        at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:491) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.SpringApplication.getExceptionReporters(SpringApplication.java:835) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:819) ~[spring-boot-3.2.1.jar:3.2.1]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:347) ~[spring-boot-3.2.1.jar:3.2.1]
        at com.cbusha.be.BackendApplication.main(BackendApplication.java:24) ~[main/:na]
Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.CannotGetJdbcConnectionException
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]
        ... 22 common frames omitted

我的 gradle 部门看起来像这样

dependencies {

    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    implementation platform('software.amazon.awssdk:bom:2.+')
    implementation 'software.amazon.awssdk:s3'
    implementation 'software.amazon.awssdk:rds'

    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-data-rest'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-cassandra'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.springframework.boot:spring-boot-autoconfigure'
    implementation 'org.springframework.kafka:spring-kafka'
    implementation 'jakarta.validation:jakarta.validation-api:3.0.2'
    implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.39'

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

我尝试添加

//    TODO Why do I need these
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.flywaydb:flyway-core'
    implementation 'org.liquibase:liquibase-core'

以及我的 application.yml 中的以下内容

spring:
  flyaway:
    enabled: false

但我仍然遇到同样的错误。我缺少什么如何删除 JPA 并避免这些问题?我已确认没有类仍在使用 JPA 注释。

我还尝试删除

implementation 'org.springframework.boot:spring-boot-autoconfigure'
依赖项并重新运行,奇怪的是我遇到了同样的问题

我也在使用 Java 21 (OpenJDK)

另一件事可能值得注意的是我使用

apply plugin: 'io.spring.dependency-management'

java spring spring-boot jpa
1个回答
0
投票

删除 JPA 后,您根本没有任何类负责数据库连接。至少添加 JDBC 依赖。像这样:

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-jdbc'
...
© www.soinside.com 2019 - 2024. All rights reserved.