Spring Batch Tables Purging

时间:2017-11-11 00:50:16

标签: spring-batch spring-batch-admin

清除Spring Table的最佳方法是什么?

Spring是否为清除提供了任何APIS?或者,我们是否需要在所有Spring Batch Tables上执行delete语句?

5 个答案:

答案 0 :(得分:1)

到目前为止,您需要自己删除数据。 Spring Batch表通常包含重要数据 - 因此有人想要从生产系统中删除它。

答案 1 :(得分:1)

我已经为此苦苦挣扎了一段时间,但是对此没有标准的实现方法。

然后我想出了自己的存储过程,

我创建了自己的变量-用于清除最近6个月的数据AGO_SIX_MONTH_DATE

您可以使用自己的值。

解决方案在以下链接-

Spring Batch Meta-Data tables Purging

答案 2 :(得分:1)

我创建了一个程序,以在给定日期之前清理数据。

    DELIMITER $$

DROP PROCEDURE IF EXISTS purgeJobsTableBefore 
$$

CREATE PROCEDURE purgeJobsTableBefore (
    IN createTime VARCHAR(100)
)
BEGIN

DELETE
FROM
   batch_job_execution_context 
WHERE
   JOB_EXECUTION_ID IN 
   (
      SELECT
         JOB_EXECUTION_ID 
      FROM
         batch_job_execution 
      WHERE
         create_time <= createTime
   );

DELETE
FROM
   batch_job_execution_params 
WHERE
   JOB_EXECUTION_ID IN 
   (
      SELECT
         JOB_EXECUTION_ID 
      FROM
         batch_job_execution 
      WHERE
         create_time <= createTime
   );

DELETE
FROM
   batch_step_execution_context 
WHERE
   step_execution_id IN 
   (
      SELECT
         step_execution_id 
      FROM
         batch_step_execution 
      WHERE
         JOB_EXECUTION_ID IN 
         (
            SELECT
               JOB_EXECUTION_ID 
            FROM
               batch_job_execution 
            WHERE
               create_time <= createTime
         )
   );

DELETE
FROM
   batch_step_execution 
WHERE
   JOB_EXECUTION_ID IN 
   (
      SELECT
         JOB_EXECUTION_ID 
      FROM
         batch_job_execution 
      WHERE
         create_time <= createTime
   );

DELETE
FROM
   batch_job_execution 
WHERE
   create_time <= createTime;

DELETE
FROM
   batch_job_instance 
WHERE
   JOB_INSTANCE_ID < (
   SELECT
      MIN(JOB_INSTANCE_ID) 
   FROM
      batch_job_execution 
   WHERE
      create_time >= createTime);

END;
$$

您只需要调用一个带有日期的程序即可清除该日期之前的数据。

CALL purgeJobsTableBefore('2020-05-22');

答案 3 :(得分:0)

另一种选择是在属性中设置batch.data.source.init = true,这意味着您将在每个新部署中删除并重新创建表。

答案 4 :(得分:0)

经过长时间的研究,我发现了一种干净的方法。

  1. 使用this库。源代码在github上公开,您可以在其中看到使用阅读this test的示例。

  2. 手动:首先,确保服务器未运行作业。然后,如果您使用的是sql server,则可以在此处的数据库中运行Official drop schema script。或者,如果您正在使用其他数据库,则可以为您here找到一个脚本。然后,您可以通过两种方式重新创建模式:

    1. 使用官方脚本手动执行。如果您使用的是SQL Server,请查看here或搜索最佳选择here
    2. spring.batch.initialize-schema属性设置为always。然后重新启动服务器以自动进行Spring Batch架构重新创建。

spring.batch.initialize-schema =总是