Spring boot自定义启动器org.springframework.boot.autoconfigure.AutoConfiguration.import未检测到配置类版本2.7.2

2024-04-20

我读到我不应该在 github 上打开问题,所以我在这里问。我已经深入研究了代码,例如spring-boot-actuator-autoconfigure没有定义@Configuration\@AutoConfiguration里面的课程META-INF/spring.factories按照文件的内容:

org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.boot.actuate.autoconfigure.metrics.ValidationFailureAnalyzer

我已经检查过并且ValidationFailureAnalyzer甚至没有注释@Configuration\@AutoConfiguration。然后我看到了文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports声明所有类@AutoConfiguration对文件进行一些提取:

org.springframework.boot.actuate.autoconfigure.amqp.RabbitHealthContributorAutoConfiguration
org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration
org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.availability.AvailabilityHealthContributorAutoConfiguration
...

所有这些类都注释有@AutoConfiguration。到目前为止一切顺利如果我们阅读docs https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration.locating-auto-configuration-candidates他们说:

Spring Boot 检查已发布的 jar 中是否存在 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件。

事实上,如果我们导入:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.7.3</version>
</dependency>

一切都很好。我不熟悉 gradle 但我没有看到任何特殊的依赖性spring-boot-actuator-starter or spring-boot-actuator-autoconfigure。 在谷歌上搜索我发现了一个讨论here https://youtrack.jetbrains.com/issue/IDEA-289633他们说:

在 Spring Boot v.2.7 中,自动配置注册从 spring.factories 移至名为 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 的新文件。 每行包含自动配置的完全限定名称。 为了向后兼容, spring.factories 中的条目仍将受到尊重。

但老实说,我尝试在新文件中移动配置类,但配置类未加载。我写了一个例子here https://github.com/paolopiccinini/spring-boot-starter-example. My org.springframework.boot.autoconfigure.AutoConfiguration.imports file:

com.example.springbootstarterexample.configuration.Config

如果我转移到旧配置spring.factries一切正常。

My @AutoConfiguration class:

@AutoConfiguration(after = JpaRepositoriesAutoConfiguration.class)
//@AutoConfigureAfter(JpaRepositoriesAutoConfiguration.class)
@EnableJpaRepositories(basePackages = "com.example.springbootstarterexample.repository")
@Import({SomeServiceImpl.class, SomeEntityController.class})
public class ExampleAutoConfiguration {

} 

难道我做错了什么?为什么spring-boot-starter-actuator作品和我的spring-boot-starter-example dosn't?


你的文件名为org.springframework.boot.autoconfigure.AutoConfiguration.import,

并且必须是org.springframework.boot.autoconfigure.AutoConfiguration.imports(注意额外的s) 在最后。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring boot自定义启动器org.springframework.boot.autoconfigure.AutoConfiguration.import未检测到配置类版本2.7.2 的相关文章

随机推荐