将 spring-boot-starter-parent 更新到 3.2.12 破坏了 spring 代码

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

这是我将 spring-boot-starter-parent 从 3.1.12 升级到 3.2.12 后遇到的异常

java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@6fba6a89 testClass = com.test.myapp.config.AppInitializerMongoDBTest, locations = [], classes = [com.test.myapp.core.services.ServicesConfig, com.test.myapp.core.repository.RepositoryConfig, com.test.myapp.config.PropertySources, com.test.myapp.jmx.JmxConfig, com.test.myapp.util.UtilConfig, com.test.myapp.core.async.AsyncConfig, com.test.myapp.core.identity.TenantIdentityConfig], contextInitializerClasses = [], activeProfiles = ["mongodbrepository"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "spring.main.web-application-type=none"], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5725a005, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@5afaf431, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b107f13, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@16e7b37c, org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@48ee57ad, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, torg.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@25615ffd, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@87a2127a], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'createApplicationService' defined in com.test.myapp.core.services.ServicesConfig: Unsatisfied dependency expressed through method 'createApplicationService' parameter 0: Invalid bean definition with name 'domainModelMongoRepository' defined in com.test.myapp.core.repository.mongodb.repository.domain.DomainModelMongoRepository defined in @EnableMongoRepositories declared on MongoMetadataConfig: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'domainModelMongoRepository' defined in com.test.myapp.core.repository.mongodb.repository.domain.DomainModelMongoRepository defined in @EnableMongoRepositories declared on MongoMetadataConfig: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

这是 pom.xml 的依赖项,我认为它可能是相关的,并且可能由于升级而被破坏,但我目前无法找到正确的依赖项。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.12</version>
    </parent>
    <dependencies>
    <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>4.11.0</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-reactivestreams</artifactId>
            <version>4.11.0</version>
        </dependency>
         <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.4</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>3.4.18</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mongodb</groupId>
                    <artifactId>mongo-java-driver</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.mongodb</groupId>
                    <artifactId>mongodb-driver-sync</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.mongodb</groupId>
                    <artifactId>mongodb-driver-reactivestreams</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>2.7.2</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.12.2</version>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>2.3-groovy-3.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-spring</artifactId>
            <version>2.3-groovy-3.0</version>
            <scope>test</scope>
        </dependency>
        </dependencies>

请提供任何建议或见解。

java spring mongodb spring-boot spring-mvc
1个回答
0
投票

spring-boot-starter-parent有653个托管依赖,这样如果spring boot管理的话,项目pom不需要指定依赖版本。

例如:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.11.0</version>
</dependency>

应该使用4.11.5版本。 所以项目 pom 应该是:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
</dependency>

因此 spring-boot-starter-parent 的下一次更新将自动选择兼容版本。 检查其他项目依赖项,看看 spring boot 是否也可以管理它们。

此外,Spring Boot 不管理的其他一些依赖项相当旧(相对于 spring-boot-starter-parent 版本)。 例如:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    <version>2.7.2</version>
</dependency>

是落后的主要版本。 该项目不知何故勉强度过了到现在! 每个依赖项都应该(希望)有某种兼容性矩阵或升级指南 - 像this

如果一切都失败,请使用 IDE 查找启动异常,以确定哪个依赖项导致版本兼容性混乱。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.