【问题标题】:Same parameters passed in every spring batch job run在每个春季批处理作业运行中传递相同的参数
【发布时间】:2021-05-11 18:38:02
【问题描述】:

我刚刚从 REST 端点触发的 spring 批处理作业切换到命令行作业运行方法。 我删除了具有JobLauncher 的控制器类。 现在我正在尝试使用以下命令运行该作业:

java -Dspring.batch.job.names="SOME JOBNAME" -jar somejar.jar

我看到BATCH_JOB_EXECUTION_PARAMS 表中默认传递了run.idtime 作业参数。 当我使用 REST 端点启动器方法触发作业时,我没有看到默认传递这些参数。

在每个作业运行中都传递了这两个参数的相同值。 run.id=1time=1612515999654。 正如预期的那样,它给了我以下JobInstanceAlreadyComplete 异常。

我的工作 bean 是这样的:

    @Bean
    public Job job() throws Exception {
        return this.jobBuilderFactory.get("SOME JOBNAME")
                .incrementer(new RunIdIncrementer())
                .start(someStep())
                .build();
    }

我通过扩展我使用的DefaultBatchConfigurer 类覆盖了这个createJobRespository() 方法,因为我的元数据表在sql server db 中的模式与默认的dbo 模式不同。

    @Override
    protected JobRepository createJobRepository() throws Exception {
    JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
    factory.setDataSource(dataSource);
    factory.setTransactionManager(transactionManager);
    factory.setTablePrefix("someSchema" + ".BATCH_");
    factory.afterPropertiesSet();
    return factory.getObject();
    }

当我删除 createJobRespository() 方法并因此在默认 dbo 架构中使用批处理元数据表时,默认情况下仅传递 run.id 并按预期递增。在这种情况下,默认不传递time 参数。

我的问题是:

  1. 当我使用命令行触发作业时,为什么默认传递 timerun.id 作业参数?
  2. 为什么每次运行作业时传递的两个参数的值都相同?即使我使用的是new RunIdIncrementer()
  3. createJobRespository() 方法是如何产生差异的?

【问题讨论】:

  • run.id 将递增,您可以检查 table select * from BATCH_JOB_EXECUTION_PARAMS bjep order by 1 desc 。这些是默认参数。

标签: java spring spring-boot spring-batch


【解决方案1】:

当我使用命令行触发作业时,为什么默认传递 time 和 run.id 作业参数?

根据您的作业定义,仅应将 run.id 参数添加到来自 RunIdIncrementer 的作业参数中。从您分享的内容中我看不出这个time 参数的来源。

为什么每次运行作业时传递的两个参数的值都相同?即使我使用的是新的 RunIdIncrementer()

不应该是这样的。使用RunIdIncrementer,每次新运行都应该生成一个新的run.id。如果不是这种情况,请提供重现问题的minimal example

createJobRespository() 方法是如何产生差异的?

我不明白这与问题有何关系。作业存储库不会以任何方式影响作业参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多