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

在每个线程中运行具有不同参数的相同spring批处理作业的多个实例

雍飞雨
2023-03-14

使用spring batch/spring boot,是否可以在每个线程中使用不同的jobparameters多次启动具有读取器、处理器和写入器的spring batch作业?

我的用例:

我有许多不同的文件夹,我需要观看。如果新文件进入一个文件夹,我需要调用该作业,并在作业处理期间锁定该文件夹。

这可能发生在不同数量的文件夹中,这就是为什么我需要一个spring批处理作业的多个实例,但每次使用不同的jobparameters

每个文件夹一个作业实例和文件夹的数量可以不同。有谁知道它甚至可能与spring批处理,或者应该发明它自己?我尝试使用spring批处理作业,但它总是说:

此作业的作业执行已在运行:JobInstance:ID=1,Version=0,job=[feedfiletransformer-delegate-job]

共有1个答案

扶高歌
2023-03-14

通过阅读mkyoung这篇文章解决了问题

JobParameters jobParameters = 
          new JobParametersBuilder()
          .addLong("time",System.currentTimeMillis()).toJobParameters();
 类似资料:
  • 在表中,默认情况下传递和作业参数。当我使用REST endpoint launcher方法触发作业时,我没有看到这些参数在默认情况下被传递。 并且在每个作业运行中传递这两个参数的相同值。和。正如所料,它给出了以下异常。 我的问题是: 当我使用命令行触发作业时,为什么默认情况下传递此和作业参数? ,为什么每次运行作业时传递的两个参数的值都是一样的?即使我正在使用 方法是如何创建差异的?

  • 我配置了一个spring批处理作业,它在spring WebService中运行。这项工作有几个步骤。我已经在不同的tomcats中部署了这个webservice的两个实例(但两个实例都使用相同的mysql数据库)。 我希望用不同的参数在两个tomcats中同时运行spring批处理作业(每个tomcats中一个)。我没有使用分区,每个作业的参数是完全不同的。 我开始工作在一个汤姆猫和一切看起来很

  • 如果我有两个作业,每个作业都写入不同的数据源,那么在它使用的数据源中写入Spring批处理元数据(jobExecution、结果、...)是有意义的。然而,Spring批处理似乎指示您有一个“主要”数据源用于该元数据。 我定义了两个数据源,都没有标记为主数据源,应用程序无法启动: 我尝试创建两个配置,每个配置都扩展DefaultBatchConfigrer: 另一个完全相同,只是工作和数据源不同。

  • 我们的要求是同时写多个文件。我们正在使用spring批处理来编写文件,并且我们正在从不同的线程中启动spring批处理。每个线程都有自己的应用程序上下文。因此我们可以确保单例bean不会跨多个线程共享。下面是我的代码片段。 这就是我们调用spring批处理的方式。 ThreadPoolExecutor TPE=new ThreadPoolExecutor(10,10,1000000,TimeUni

  • 我可以同时运行我的作业步骤,但我有点担心,如果我用不同的参数同时启动同一作业的多个实例,它将如何工作。 我正在使用importExchange作业导入Exchange数据,但如果我同时为不同的市场如美国市场、欧洲marktet启动importExchange作业。 Partitioner将输入exchange名称分区到不同的分区步骤执行上下文中,MessagePartitionHandler将st

  • 我必须在表中的一些配置数据库中爬行。其中每个记录指定要从中读取的模式。因此,我们必须对表格进行投票,并适当地运行作业。 考虑使用Spring批处理(JdbcPagingItemReader)从所有配置的模式中读取数据。如果我必须配置它,如何使用Spring批处理? 我应该使用不同的读取器为每个数据库读取多个作业,还是有什么方法可以在运行时发送数据源以供Spring Batch读取数据? 如何为单个