spring批处理限制作业执行

2ul0zpep  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(360)

我的spring批处理应用程序运行在pcf平台上,该平台连接到mysql数据库(单个示例),当只有一个示例启动并运行时,它运行良好,但是当涉及到多个应用程序示例时,我得到了异常org.springframework.dao.duplicatekeyexception。这可能是因为类似的批处理作业同时启动&试图用相同的作业id更新批处理示例表。是否有任何方法限制这种失败,或者以另一种方式,我想要一个解决方案,即即使有多个示例在运行,一次也只运行一个批处理作业。

ryevplcw

ryevplcw1#

对我来说,这是个好兆头 DuplicateKeyException 被抛出。因为springbatch已经确保了同一个作业不会并行执行,所以它正好实现了您想要做的事情(i、 e.只有一个服务器示例成功执行作业,而另一个服务器示例没有成功执行作业)
所以我看你的案子没什么坏处。如果您不喜欢此异常,可以捕获它并将其作为应用程序级异常重新抛出,例如“作业正在由其他服务器示例执行,请跳过以执行它”
如果您真的希望只有一个服务器示例会尝试触发以执行作业,而其他服务器不会同时尝试触发,那么这不是spring批处理的问题,而是如何确保在分布式环境中只有一个服务器节点触发请求的问题。如果批处理作业作为计划任务使用 @Scheduled ,您可以考虑使用分布式锁(如shedlock)来确保只在一个节点上同时最多执行一次。

相关问题