【问题标题】:Spring Boot: Configuration Class is simply ignored and not loadedSpring Boot:配置类被简单地忽略而不加载
【发布时间】:2017-04-21 13:31:58
【问题描述】:

我的一些@SpringBootApplications 的类路径中有以下@Configuration 类:

@Configuration
@Import({MainConfig.class, RestConfig.class})
public class ApiConfig {

    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public Client client() throws ExecutionException, InterruptedException {
        return service.create(Client.class);
    }

}

我有两个使用此配置的服务(具有不同名称的 Client 类)。

服务 1 正确启动并加载此配置。我可以在启动过程中看到 ApiConfig 类型的 bean 已被急切地初始化。

服务2启动不正确:上面的配置类被简单的忽略,没有初始化。

服务在不同的 JVM 中启动。

其他服务具有几乎相同的非常小的application.properties 文件:

spring.application.name=xxx-api
server.port=0
eureka.name=xxx.api
# Only for reading properties from a central location
context.initializer.classes=com.package.contextClass

我什至不确定我可以在问题中写入什么样的附加信息。我已经浏览了几个小时的日志,没有发现明显的区别,只是它明显忽略了我的 @Configuration 类。

以前有人遇到过这个问题吗?

【问题讨论】:

  • 这个配置类应该如何加载?您没有显示您的 Spring Boot 引导程序。
  • 对不起,它应该使用@SpringBootApplication加载,即使用@ComponentScan@EnableAutoConfiguration
  • 在这两种情况下,@Configuration 类是否与您的 Springboot 应用程序类在同一个包中?

标签: java spring spring-boot


【解决方案1】:

默认情况下,@SpringBootApplication 注释(或更准确地说是推断的 @ComponentScan 注释)仅扫描被注释类旁边和下方的类路径。

因此,您的配置类必须放在 Application 类的旁边或子包中。

【讨论】:

  • 哇.. 谢谢。令人惊讶的是,放错地方的包裹会造成多大的混乱。我以为我快疯了,但这只是我的 @Configuration 类没有运行,因为它不在我的 Application 类的旁边或子包中
猜你喜欢
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多