春季批处理作业实例已存在

彼得·塔基耶夫(Petar Tahchiev)

好的,

我知道以前已经有人问过这个问题,但是我仍然找不到我的问题的明确答案。我的问题是:我正在使用spring batch将数据导出到SOLR搜索服务器。它需要每分钟运行一次,因此我可以导出所有更新。第一个执行通过OK,但是第二个执行抱怨:

2014-10-02 20:37:00,022 [defaultTaskScheduler-1] ERROR: catching
org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException: A job     instance already exists and is complete for parameters={catalogVersionPK=3378876823725152,
type=UPDATE}.  If you want to run this job again, change the parameters.
    at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:126)
    at 

当然,我可以为工作添加日期时间参数,如下所示:

.addLong("time", System.getCurrentTimeMillis())

然后该作业可以运行多次。但是,我也想查询作业的最后执行,所以我有这样的代码:

DateTime endTime = new DateTime(0);
JobExecution je = jobRepository.getLastJobExecution("searchExportJob", new JobParametersBuilder().addLong("catalogVersionPK", catalogVersionPK).addString("type", type).toJobParameters());
if (je != null && je.getEndTime() != null) {
   endTime = new DateTime(je.getEndTime());
}

由于我没有提供时间参数,因此没有返回任何结果。因此,似乎我可以一次运行该作业并获得最后的执行时间,或者我可以多次运行它而没有获得最后的执行时间。我真的被卡住了:(

海姆·拉曼

使用Luca Basso Ricci建议的Job Explorer。

因为您不知道作业参数,所以需要按实例查找。

  1. 查找名为searchExportJob的作业的最后一个实例
  2. 查找上面实例的最后执行

这样,您仅使用Spring Batch API

//We can set count 1 because job instance are ordered by instance id descending
//so we know the first one returned is the last instance 
List<JobInstance> instances = jobExplorer.getJobInstances("searchExportJob",0,1);
JobInstance lastInstance = instances.get(0);
List<JobExecution> jobExecutions = jobExplorer.getJobExecutions(lastInstance);

//JobExcectuin is ordered by execution id descending so first 
//result is the last execution
JobExecution  je = jobExecutions.get(0);
if (je != null && je.getEndTime() != null) {
     endTime = new DateTime(je.getEndTime());
 }

请注意,此代码仅适用于2.1.x中的Spring Batch 2.2.x及更高版本,API有所不同

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在春季批处理中将参数从父作业传递给stepJob?

来自分类Dev

春季批处理,记录跳过的记录/行

来自分类Dev

在春季批处理中从处理器调用另一个作业

来自分类Dev

春季批处理步骤执行警报

来自分类Dev

春季批处理步骤失败

来自分类Dev

春季批处理:NotSerializableException

来自分类Dev

春季批处理作业重新启动时始终读取前n行

来自分类Dev

春季批处理:输入资源不存在类路径资源

来自分类Dev

春季批处理:组装作业而不是对其进行配置(可扩展的作业配置)

来自分类Dev

春季批处理:作业实例在使用注释时按顺序运行

来自分类Dev

春季批处理步骤不执行

来自分类Dev

春季批处理,如何删除根标签

来自分类Dev

已在事务中时开始春季批处理作业

来自分类Dev

第一个春季批处理作业被第二个作业的详细信息覆盖

来自分类Dev

在春季批处理中将参数从父作业传递到stepJob吗?

来自分类Dev

春季批处理,记录跳过的记录/行

来自分类Dev

春季批处理-由于死锁异常而自动重新运行的作业失败

来自分类Dev

春季批处理框架

来自分类Dev

春季批处理StoredProcedureItemReader

来自分类Dev

春季批处理作业中有多个分区程序

来自分类Dev

无法在春季实例化Quartz作业

来自分类Dev

春季批处理中的链接步骤

来自分类Dev

春季批处理-运行JobLauncher

来自分类Dev

春季批处理AsynchJob启动器,设置作业仓库时出错

来自分类Dev

春季批处理中子句中的preparestatemnt

来自分类Dev

如何使作家在春季批处理中为每个工作实例启动

来自分类Dev

如果任何块失败,如何中止春季批处理作业

来自分类Dev

在春季批处理中配置作业的多个版本

来自分类Dev

在上一个作业开始 5 秒后开始预定的春季批处理作业

Related 相关文章

  1. 1

    在春季批处理中将参数从父作业传递给stepJob?

  2. 2

    春季批处理,记录跳过的记录/行

  3. 3

    在春季批处理中从处理器调用另一个作业

  4. 4

    春季批处理步骤执行警报

  5. 5

    春季批处理步骤失败

  6. 6

    春季批处理:NotSerializableException

  7. 7

    春季批处理作业重新启动时始终读取前n行

  8. 8

    春季批处理:输入资源不存在类路径资源

  9. 9

    春季批处理:组装作业而不是对其进行配置(可扩展的作业配置)

  10. 10

    春季批处理:作业实例在使用注释时按顺序运行

  11. 11

    春季批处理步骤不执行

  12. 12

    春季批处理,如何删除根标签

  13. 13

    已在事务中时开始春季批处理作业

  14. 14

    第一个春季批处理作业被第二个作业的详细信息覆盖

  15. 15

    在春季批处理中将参数从父作业传递到stepJob吗?

  16. 16

    春季批处理,记录跳过的记录/行

  17. 17

    春季批处理-由于死锁异常而自动重新运行的作业失败

  18. 18

    春季批处理框架

  19. 19

    春季批处理StoredProcedureItemReader

  20. 20

    春季批处理作业中有多个分区程序

  21. 21

    无法在春季实例化Quartz作业

  22. 22

    春季批处理中的链接步骤

  23. 23

    春季批处理-运行JobLauncher

  24. 24

    春季批处理AsynchJob启动器,设置作业仓库时出错

  25. 25

    春季批处理中子句中的preparestatemnt

  26. 26

    如何使作家在春季批处理中为每个工作实例启动

  27. 27

    如果任何块失败,如何中止春季批处理作业

  28. 28

    在春季批处理中配置作业的多个版本

  29. 29

    在上一个作业开始 5 秒后开始预定的春季批处理作业

热门标签

归档