首页 > 解决方案 > Spring boot中的执行过程

问题描述

spring-boot 新手,查看在线示例。有一个疑问。

主调用类

@SpringBootApplication
public class Application {

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

批处理类

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

  --
  --
  so on

}

SpringApplication.run(Application.class, args)创建一个适当的 ApplicationContext 实例并加载 bean。

我试图弄清楚,什么是代码流(逐步执行)。然后在不同的地方设置记录器后,发现BatchConfiguration类方法是按顺序执行的,它也涵盖了整个代码的执行。

检查了这个类,它以这两个标签为首@Configuration, @EnableBatchProcessing。是否正确理解,一旦SpringApplication.run完成,spring-boot 会寻找带有@Configuration, @EnableBatchProcessing标签的类并从那里处理所有内容?是驱动类吗?

BatchConfiguration如果上述理解是正确的,那么我们在一个 spring-boot 应用程序中可以拥有多少个此类( )?如果不止一个,那么流量会是多少?

标签: javaspringspring-boot

解决方案


几点。

  • SpringApplication.run(Application.class, args) 将扫描Application.class同一个包内或以下的所有类,初始化applicationContext中的所有bean并分发应用程序事件。
  • 带有@Configuration 的类用于定义bean。bean 将被重新排序以允许 bean 之间的依赖关系,并且每个 bean 都将使用其 @Bean-annotated 方法进行初始化。
  • @EnableBatchProcessing 只需要在一个 @Configuration 类上。它将自动配置更多可用作依赖项的 bean,例如 jobBuilderFactory 和 stepBuilderFactory,以及 jobLauncher。jobLauncher 将依赖于所有类型为“Job”的 bean,因此它将最后初始化。
  • 每个 bean 都可以通过实现某个接口来监听 applicationEvents,并为此定义一个响应。jobLauncher 将侦听“应用程序启动”事件并通过在主线程上执行其所有作业来响应,或者使用线程池(如果已定义)。

请参阅 BatchAutoConfiguration了解如何配置自动配置 bean 的行为。


推荐阅读