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)|浏览(132)

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

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

我已经检查过了,ValidationFailureAnalyzer甚至没有用@Configuration\@AutoConfiguration注解。然后我看到文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports声明了所有的类@AutoConfiguration,下面是对文件的一个小提取:

  1. org.springframework.boot.actuate.autoconfigure.amqp.RabbitHealthContributorAutoConfiguration
  2. org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration
  3. org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration
  4. org.springframework.boot.actuate.autoconfigure.availability.AvailabilityHealthContributorAutoConfiguration
  5. ...

所有这些类都用@AutoConfiguration注解。到目前为止一切顺利,如果我们阅读文档,他们说:
Sping Boot 检查您发布的jar中是否存在META-INF/spring/org.springframework.boot. autoconigure.AutoConfiguration.imports文件。
实际上,如果我们导入:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-actuator</artifactId>
  4. <version>2.7.3</version>
  5. </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文件:

  1. com.example.springbootstarterexample.configuration.Config

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

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

我做错什么了吗为什么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

相关问题