java Sping Boot custom starter org.springframework.boot.autoconfigure.AutoConfiguration.import not detecting configuration classes version 2.7.2

nuypyhwy  于 2023-09-29  发布在  Java
关注(0)|答案(2)|浏览(107)

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

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注解。到目前为止一切顺利,如果我们阅读文档,他们说:
Sping Boot 检查您发布的jar中是否存在META-INF/spring/org.springframework.boot. autoconigure.AutoConfiguration.imports文件。
实际上,如果我们导入:

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

一切正常。我对gradle不太熟练,但我在spring-boot-actuator-starterspring-boot-actuator-autoconfigure中没有看到任何特殊的依赖性。在谷歌上搜索,我发现了一个讨论here,他们说:
在Sping Boot 中,2.7自动配置注册从spring.factories移动到名为META-INF/spring/org. springframework. boot. autoconfigure. AutoConfiguration. imports的新文件。每行包含自动配置的完全限定名称。为了向后兼容,spring.factories中的条目仍然会被接受。
但老实说,我已经尝试将配置类移动到新文件中,但配置类没有加载。我写了一个例子here。我的org.springframework.boot.autoconfigure.AutoConfiguration.imports文件:

com.example.springbootstarterexample.configuration.Config

如果我移动到旧的配置spring.factries一切正常。
我的@AutoConfiguration类:

@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不能?

laik7k3q

laik7k3q1#

你的文件名是org.springframework.boot.autoconfigure.AutoConfiguration.import
并且必须是org.springframework.boot.autoconfigure.AutoConfiguration.imports(注意结尾处多出的s)。

3bygqnnd

3bygqnnd2#

将文件org.springframework.boot.autoconfigure.AutoConfiguration.imports放在resource/META-INF/spring package-> ~ProjectName/src/main/resources/META-INF/spring/
然后,此文件可以包含自定义配置文件的完全限定名,如下面的示例com.test.autoconfigure.MongoApplicationDBConfig

相关问题