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

Pp8*_*p88 6 java spring-boot spring-boot-starter

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

org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.boot.actuate.autoconfigure.metrics.ValidationFailureAnalyzer
Run Code Online (Sandbox Code Playgroud)

我检查过,ValidationFailureAnalyzer甚至没有注释@Configuration\@AutoConfigurationMETA-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
...
Run Code Online (Sandbox Code Playgroud)

所有这些类都用 注释@AutoConfiguration。到目前为止一切顺利如果我们阅读文档,他们会说:

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>
Run Code Online (Sandbox Code Playgroud)

一切都很好。我不熟悉 gradle 但我没有看到spring-boot-actuator-starter或中有任何特殊的依赖关系spring-boot-actuator-autoconfigure。在谷歌上搜索我发现这里有一个讨论,他们说:

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

但老实说,我尝试在新文件中移动配置类,但配置类未加载。我在这里写了一个例子。我的org.springframework.boot.autoconfigure.AutoConfiguration.imports文件:

com.example.springbootstarterexample.configuration.Config
Run Code Online (Sandbox Code Playgroud)

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

我的@AutoConfiguration课:

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

} 
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?为什么spring-boot-starter-actuator有效而我spring-boot-starter-example无效?

Eug*_*ene 6

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

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