java - 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 应用程序中可以拥有多少个此类( )?如果不止一个,那么流量会是多少?
解决方案
几点。
- 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 的行为。
推荐阅读
- javascript - FB Share JavaScript“未定义share_button”
- python - 获取单元格的行和列,xlwings UDF在哪里被调用?
- c++ - 中间的 C++ 可变参数模板更改元素
- javascript - 由于源映射支持/注册,Docker 容器中的节点构建工件无法运行
- java - 运行 beanshell 时出现路径和类路径错误
- java - 返回上一页时使用 Intent() 而不是 finish() 有什么好处?
- c++ - 使 ReSharper 使用 m_ 约定
- bash - Bash 脚本在 file.dev 中查找某些文本并将其分配给变量
- javascript - click 函数只获取表中的最后一个 id
- python - PYTHON - 对字典列表进行分组