清除Spring Table的最佳方法是什么?
Spring是否为清除提供了任何APIS?或者,我们是否需要在所有Spring Batch Tables上执行delete语句?
答案 0 :(得分:1)
到目前为止,您需要自己删除数据。 Spring Batch表通常包含重要数据 - 因此有人想要从生产系统中删除它。
答案 1 :(得分:1)
我已经为此苦苦挣扎了一段时间,但是对此没有标准的实现方法。
然后我想出了自己的存储过程,
我创建了自己的变量-用于清除最近6个月的数据AGO_SIX_MONTH_DATE
您可以使用自己的值。
解决方案在以下链接-
答案 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)
经过长时间的研究,我发现了一种干净的方法。
手动:首先,确保服务器未运行作业。然后,如果您使用的是sql server,则可以在此处的数据库中运行Official drop schema script。或者,如果您正在使用其他数据库,则可以为您here找到一个脚本。然后,您可以通过两种方式重新创建模式:
spring.batch.initialize-schema =总是