在 spring 批次中,没有 scope="..." 的 ItemReader 的作用域是什么?
In spring batch, what is a scope of an ItemReader without scope="..."?
如果我有一个 web 应用程序,有一个应用程序上下文加载我的 webapp 和我所有的作业配置文件的所有内容,并且如果我在作业中有一个简单的 ItemReader 没有范围="step", reader 是单例吧?因此,如果我通过 SimpleJobLauncher 从控制器启动我的作业两次,我将使用相同的 bean,对吗?除非我设置 scope="step",以便每个作业执行一个 bean ?
另一方面,如果我从 CommandLineJobRunner 启动作业,我将有两个不同的应用程序上下文,所以有两个不同的 bean,对吗?
我的断言有效吗?
谢谢
是的,没错。基本上,SpringContext 中的每个 Bean 实例都是单例。
但是,大多数读者或作者都有一个状态。例如,FlatFileItemReader 只能 运行 一次,之后它指向文件末尾并且它的 "close" 方法被调用。因此,如果您只是再次启动该作业,它将无法运行,因为 FlatfileItemReader 已关闭。
对于这种情况,您需要使用 sope=step 来定义它们。
如果我有一个 web 应用程序,有一个应用程序上下文加载我的 webapp 和我所有的作业配置文件的所有内容,并且如果我在作业中有一个简单的 ItemReader 没有范围="step", reader 是单例吧?因此,如果我通过 SimpleJobLauncher 从控制器启动我的作业两次,我将使用相同的 bean,对吗?除非我设置 scope="step",以便每个作业执行一个 bean ?
另一方面,如果我从 CommandLineJobRunner 启动作业,我将有两个不同的应用程序上下文,所以有两个不同的 bean,对吗?
我的断言有效吗?
谢谢
是的,没错。基本上,SpringContext 中的每个 Bean 实例都是单例。
但是,大多数读者或作者都有一个状态。例如,FlatFileItemReader 只能 运行 一次,之后它指向文件末尾并且它的 "close" 方法被调用。因此,如果您只是再次启动该作业,它将无法运行,因为 FlatfileItemReader 已关闭。
对于这种情况,您需要使用 sope=step 来定义它们。