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

98446b193fdf187a2d92cea8aa2b0160b24.jpg

    

    查看源码便可知DefaultBatchConfigurer类被注解为@Compoent,意思是当成普通POJO实例化到Spring容器中。

接下来看看它的成员变量如何被实例化。

1) DataSource和PlatformTransactionManager

    e31f90f61db1fb54bd41a2cded7bc1f35d1.jpg

 

      7c1ceae04815dfb88d2d1567432d0ff5c0a.jpg

setDataSource办法被注解为@Autowired(required = false),表示注入你在框架中配置的数据源DataSource,其中required = false表示非强制性注入,dataSource为空时跳过,不抛异常。其中TransactionManager为空时,则创建一个DataSourceTransactionManager。

 

2)JobRepository,JobLauncher和JobExplorer

    5489f88c2dae4c9f32387ec9a9f1dff3e6c.jpg

此办法注解为@PostConstruct,表示DefaultBatchConfigurer构建和相关依赖完成注入后,调用该办法继续完成相关的初始化。

可以看到首先判断数据源dataSource是否为空,如果为空则后续执行的数据记录到内存,反之则持久化进数据库。

6505bb4d9783bf85c3195ec13e553e20793.jpg

这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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值