当前位置: 首页 > 知识库问答 >
问题:

Spring批处理后期绑定-步骤范围还是作业范围?

颛孙星海
2023-03-14

我正在处理一个使用Spring批处理的项目。在本项目中,我使用Spring批处理后期绑定,其中我使用JobParameters注入了一个参数(将用作SQL读取器查询的条件的字符串)。目前,我正在使用@stepscope进行后期绑定,所有操作都非常正常。

这里我要问的是何时使用@stepscope以及何时使用@jobscope。我已经阅读了Spring批处理参考文件,并在谷歌上搜索了StepScope和jobscope。我得到的只是:

a.StepScope:Spring批处理将使用Spring容器为每个步骤执行实例化该组件的一个新实例。

b.JobScope:每个正在执行的作业只有一个实例。

我只是无法确定何时使用StepScope或jobscope的考虑。谁能解释得更深一点吗?

共有1个答案

皇甫智明
2023-03-14

每个作业由三个步骤组成,一个读步骤,一个处理步骤,和一个写步骤。如果您创建了一个具有Step作用域的bean,那么您可以从这三个步骤中的每一个步骤引用它--但是在每一个步骤中都将得到该bean的不同实例。创建一个带有Job作用域的bean,然后可以从这三个步骤中的每一个引用它--在所有三个上下文中都是相同的实例。

因此,如果您需要一个步骤将某些内容存储在bean中,以便同一作业中的后续步骤访问,那么您希望该bean位于作业范围内。如果您希望确保任何步骤存储和操作的bean中的数据都是该步骤的本地数据(对其他步骤隐藏),那么您希望该bean位于step范围内。

 类似资料:
  • 我可以在xml配置中使用而没有任何问题,但如果将其用作如下注释。它会抛出以下错误 原因:组织。springframework。豆。工厂UnsatisfiedDependencyException:创建在类路径资源[BatchConfiguration.class]中定义的名为“step1”的bean时出错:通过索引1为[org.springframework.batch.item.ItemRead

  • 我只想知道spring batch中是否有“job”范围,就像“step”范围一样?如果没有,我们应该开发我们的自定义范围,还是有更好的替代方案? 提前谢了。

  • 我正在尝试在Spring批处理中并行运行多个作业。在谷歌上搜索了很多之后,我遇到了JobStep。有没有人使用过JobStep可以解释如何使用它来并行运行作业,或者有没有其他方法可以并行运行2个独立的作业,即当我启动批处理时,2个作业应该开始并行运行。我的要求就像 当我的应用程序启动时,两个作业都应该开始运行。使用spring batch是否可以这样做 编辑:我甚至试过这种方法 我面临着例外。sp

  • 如果我有一个Web应用程序,它的应用程序上下文加载了我的webapp和所有作业配置文件的所有内容,如果我的作业中有一个没有范围="步骤"的简单ItemReader,那么阅读器是单例的,对吗?所以如果我通过SimpleJobLauncher从控制器启动两次作业,我会使用同一个bean,对吗?除非我放入范围="步骤",以便每个作业执行一个bean? 另一方面,如果我从CommandLineJobRun

  • 围绕这个主题似乎有很多问题,但我似乎找不到答案。如果这是个骗局,对不起! 我有一个有许多步骤的工作…在某一点上,我想并行地运行多个文件的项处理(读/验证/写)。在使这段代码并行之前,我同步运行了它,一切都很好。当我使用task-executor添加batch:split时,我现在得到的错误是: 2020-09-01 01:07:12,668[SimpleAsyncTaskExecutor-1]错误

  • 你可以点击 “设置任务计划”来为一个批处理作业设置计划和点击 “删除任务计划”来移除计划。 如果你在“常规”选项卡选择“不管用户是否登录都要运行”,当你保存计划时你必须在 Windows 计划程序提供你的操作系统用户密码。 【注意】请在设置计划之前保存批处理作业。在运行计划之前,在连接窗口内的密码必须保存。