Spring Batch DefaultBatchConfigurer源码解析
在尝试过运行过Spring batch应用或例子的都知道,在4.1.2版本中相关依赖组件都无需特别配置,基本上都已经有默认注入。主要是因为此类DefaultBatchConfigurer源码:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/annotation/DefaultBatchConfigurer.java
查看源码便可知DefaultBatchConfigurer类被注解为@Compoent,意思是当成普通POJO实例化到Spring容器中。
接下来看看它的成员变量如何被实例化。
1) DataSource和PlatformTransactionManager
setDataSource办法被注解为@Autowired(required = false),表示注入你在框架中配置的数据源DataSource,其中required = false表示非强制性注入,dataSource为空时跳过,不抛异常。其中TransactionManager为空时,则创建一个DataSourceTransactionManager。
2)JobRepository,JobLauncher和JobExplorer
此办法注解为@PostConstruct,表示DefaultBatchConfigurer构建和相关依赖完成注入后,调用该办法继续完成相关的初始化。
可以看到首先判断数据源dataSource是否为空,如果为空则后续执行的数据记录到内存,反之则持久化进数据库。
这3个办法则是创建了相关的对象,如JobLuancher实际上实例化的是SimpleJobLauncher,JobRepository和JobExplorer则通过对应的FactoryBean生成。
备注 : 核心的其实是BatchConfigurer接口(在真正执行时是根据此接口获取对应相关的实例),你可以实现此接口自定义相关的内容。
在Spring boot自动配置包中(spring-boot-autoconfigure.jar)也提供了相关的类BasicBatchConfigurer,它便是实现了此接口。当引入了该包后spring-batch项目运行中实际上是使用了BasicBatchConfigurer的实例。BasicBatchConfigurer与DefaultBatchConfigurer的代码实现采用了相同的逻辑,做了些许的变化和采用了代理。
转载于:https://my.oschina.net/u/180548/blog/3050989