java Sping Boot 3升级-自动配置,忽略导入

kdfy810k  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(127)

我正在将应用程序从Sping Boot 2.6升级到3.1。该应用程序是一个模块化的gradle项目,并利用Spring的自动配置。
有一个应用程序依赖于几个模块,所有这些模块都通过META-INF/spring.factories类提供自己的自动配置。它们指向一个配置类,该配置类将初始化该模块的代码并设置相应的组件扫描。
这在Sping Boot 2中运行得很好。正如更新手册所建议的,我已经将这些文件迁移到META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,并在每行插入一个单独的配置。配置类本身注解为AutoConfiguration,主类注解为@ImportAutoConfiguration
但是,当我启动应用程序时,Autoconfiguration似乎没有被选中,并且我得到了关于缺少bean的启动错误。我验证了10次,它是正确的文件名和引用正确的类。
示例案例:
admin-panel模块中的main方法:

package de.herakles.platform.krakenadminpanel;

// import

@SpringBootApplication
@EnableWebMvc
@ImportAutoConfiguration
public class KrakenAdminPanel {

    public static void main(String[] args) {
        SpringApplication.run(KrakenAdminPanel.class, args);
    }

}

Gradle依赖于一个名为 platform-dialect 的模块,该模块包含一个SupplierService类型的bean。
在模块platform-dialect中,我有这个文件:platform-dialect/src/main/resources/META-INF/spring /org.springframework.boot.autoconfigure.AutoConfiguration.imports
正好包含这一行:

de.herakles.platform.kraken.platformdialect.KrakenPlatformDialectConfiguration

配置类如下所示:

package de.herakles.platform.kraken.platformdialect;

//imports 

@AutoConfiguration
@EnableJpaRepositories(basePackages = "de.herakles")
@EntityScan(basePackages = "de.herakles")
@ComponentScan(basePackageClasses = KrakenPlatformDialectConfiguration.class)
public class KrakenPlatformDialectConfiguration {

}

在该模块中,有一个de.herakles.platform.kraken.platformdialect.supplier.SupplierService,它被注解为@Service,并且应该由组件扫描(在升级之前)拾取。我得到的错误消息是:

  • de.herakles.platform.krakenadminpanel.dataengineering中构造函数的参数0。VariantController需要类型为“de.herakles.platform.kraken.platformdialect.supplier.SupplierService”的Bean,但找不到该Bean。*

我真的很挣扎-尝试了所有的建议,我可以找到没有工作。我也缺乏任何关于如何进一步调试问题的指示,因为关于新的自动配置系统的文档和信息不是很密集。因此,我将非常感谢一个解决方案或提示如何调试这个问题。
谢谢马蒂亚斯

f4t66c6m

f4t66c6m1#

问题出现在Gradle构建中:虽然单个jar包含新的AutoConfiguration.imports文件,但这些jar并没有放在spring Boot 插件创建的uber jar中-仍然有没有AutoConfiguration. imports的旧版本。
清理所有构建文件夹解决了问题。

相关问题