我读到我不应该在 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?