【问题标题】:Spring boot application, component scan missing some @Component春季启动应用程序,组件扫描缺少一些@Component
【发布时间】:2020-01-17 02:21:04
【问题描述】:

我是 Spring 的新手,我现在有点迷茫。 在这个 SpringBoot 应用程序中,我有 3 个类,所有 3 个类都继承自一个顶级抽象类。 这三个类被注解为@Component,并且在同一个包中。

AbstractClass
|
|-- @Component ClassA extends abstractClass
|-- @Component ClassB extends abstractClass
|-- @Component ClassC extends abstractClass

每个类启动一些线程来做一些后台工作。 所以基本上 AbstractClass 处理线程启动逻辑,而每个 Class 都有自己的 ExecutorService 和多个线程,并将实现将提交给 ExecutorService 的可运行对象的行为。

这是我的 Spring 配置:

@SpringBootApplication
@ComponentScan(basePackages = {"com.myapp.test"})
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

我所有的课程都在 com.myapp.test.listeners 包中。

有趣的是:ClassA 启动并完美运行。 ClassB 和 ClassC 没有启动,甚至没有出现在日志中。

我已经为此浪费了 3 个小时...如果你们中的一个人有想法... 谢谢!

【问题讨论】:

  • 你可以试试@ComponentScan({ "package-name" })注解,把package-name换成你自己的这三个类的包名。
  • 他们如何开始?当 bean 准备好时,您是否有 @PostContruct 或某种方式来执行代码?还是先在某个地方自动装配它,然后调用一个方法?
  • 请添加您的 Spring 配置
  • 如果您为 bean 使用 xml 配置,您可以将以下内容添加到您的 dispatcher-servlet.xml
  • 您好,非常感谢您的留言。我的配置是一个空的@SpringBootApplication。我在哪里设置@ComponentScan(basePackages = {"com.myapp.test"})。我所有的课程都在一个名为“com.myapp.test.listeners”的包中。谢谢,

标签: java spring spring-boot dependency-injection java-ee-6


【解决方案1】:

所以我解决了我的问题,我不知道到底是什么导致了这个问题......但我知道是什么解决了它:我的一个班级暂时没有使用,所以我使用 Excutors.newFixedThreadPool(0) 创建它ExecutorService 成员...触发异常(未显示在日志中)。 奇怪的是,它保留了一个要扫描和创建的其他组件......但现在它可以工作了。

【讨论】:

  • 这里没有什么奇怪的。 Spring 以快速失败的方式创建 bean。一旦它不能创建一个 bean,它就会抛出异常并停止任何进一步的处理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2018-05-20
  • 1970-01-01
  • 2015-12-23
  • 2015-11-11
  • 2018-09-04
  • 2020-04-23
相关资源
最近更新 更多