常见问题解答
是否可以在多个线程或多个进程中执行作业?
有三种方法可以处理这个问题——但我们建议在分析这些要求时保持谨慎(真的有必要吗?)。
-
添加一个
任务执行者到台阶上。用于配置步骤的“StepBuilder”里有“taskExecutor”属性,你可以设置。只要该步骤本身是可重启的(有效幂等元),这种方法就有效。并行作业示例展示了其实际工作方式——使用“进程指示器”模式,在业务事务内将输入记录标记为完成。 -
使用该
分区步将你的步执行明确分拆到多个步实例中。Spring Batch 有本地多线程实现的主要策略(分区处理),这使得它成为处理IO密集型工作的极佳选择。记得使用scope=“step”对于步中的有状态组件,也就是这样,这样每次执行步骤都会创建独立实例,线程之间不会有串扰。 -
采用实现的远程分块方法
春批积分模块。这需要一些耐用的中间件(如JMS),以实现驾驶步与远程工作人员之间的可靠通信。基本思路是使用特殊技能ItemWriter在驱动过程中,以及在工作过程上进行监听模式(通过块处理器).
我怎样才能让ItemReader讨论帖变得安全?
你可以同步read()方法(例如通过将它包裹在执行同步的委托器中)。
记住,你会失去可重启性,所以最佳做法是标记该步骤不可重启,并且为了安全(和高效)你也可以设置saveState=false在读者上。
Spring Batch关于灵活策略和默认实施的理念是什么?你能为这个或那个房产添加一个公共获取者吗?
Spring Batch 中有许多扩展点,供框架开发者使用(而非业务逻辑的实现者)。
我们期望客户端创建更具体的策略,这些策略可以插入来控制提交间隔等参数(完成政策),
关于如何处理例外的规则(异常处理程序),以及许多其他作品。
总体来说,我们尽量劝阻用户不要扩展框架类。Java 语言在标记类和接口方面没有内部那么灵活。
一般来说,你可以期待在封包中源树顶层出现任何东西org.springframework.batch.*是公开的,但不一定是子类的。不鼓励扩展我们对大多数策略的具体实现,倾向于组合或分叉方法。如果你的代码只能使用Spring Batch的接口,那就能获得最大的可移植性。
Spring Batch 和 Quartz 有什么不同?它们在溶液中都有合适的位置吗?
Spring Batch 和 Quartz 有不同的目标。Spring Batch 提供处理大量数据的功能,Quartz 提供调度任务的功能。因此,Quartz 可以补充 Spring Batch,但并不排除技术。一个常见的组合是使用 Quartz 作为 Spring Batch 作业的触发器,使用一个 Cron 表达式以及 Spring Core 的便利性SchedulerFactoryBean.
我该如何安排Spring Batch的工作?
使用调度工具。市面上有很多这样的工具。例子:Quartz、Control-M、Autosys。Quartz没有Control-M或Autosys的所有功能——它本来就应该是轻量级的。如果你想要更轻量级的,可以直接用作系统(克朗,在,等等)。
简单的顺序依赖可以通过Spring Batch的作业步骤模型和Spring Batch中的非顺序特征实现。我们认为这相当普遍。事实上,这也更容易纠正调度器常见的误用——配置了数百个作业,其中许多作业并非独立,而是相互依赖。
Spring Batch 如何让项目优化性能和可扩展性(通过并行处理或其他方式)?
我们认为这是工作或步. 该步骤的具体实现涉及拆解业务逻辑并高效地在并行进程或处理器之间共享(参见分区步). 这里有多种技术可以发挥作用。本质是一组并发的远程调用分布式代理,这些代理可以处理部分业务处理。由于业务处理通常已经模块化——例如输入一项,处理它——Spring Batch可以用多种方式策略分发。我们有过一些经验的一个实现是一组远程Web服务处理业务处理。我们向多个远程调用发送特定范围的主键输入。同样的基本策略适用于任何Spring Remoting协议(普通RMI、HttpInvoker、JMS、Hessian等),只需几行修改执行层配置。
消息如何用于批量架构的扩展?
现有项目中有大量实际证据表明,批量处理采用流水线方法极为有益,能带来韧性和高吞吐量。我们经常面临关键任务的应用,审计轨迹至关重要,且需要保证处理,但对负载性能有极其严格的限制。高吞吐量带来竞争优势。
Matt Welsh 的研究表明,分阶段事件驱动架构(SEDA)相比更为僵硬的处理架构有巨大优势,而面向消息的中间件(JMS、AQ、MQ、Tibco 等)为我们提供了开箱即用的极大韧性。在一个系统中,下游和上游阶段之间存在反馈,从而可以根据需求量调整消费者数量。那么这如何融入 Spring Batch?Spring-batch-integration 项目在 Spring Integration 中实现了这一模式,可以用来扩展任何需要处理大量项目的步骤的远程处理。特别可以参考“chunk”软件包,以及ItemWriter和块请求处理程序实现内容。