【问题标题】:Resetting an In-Memory database in Spring Batch在 Spring Batch 中重置 In-Memory 数据库
【发布时间】:2019-08-11 01:57:39
【问题描述】:

我正在使用 HSQLDB 来持久化 Spring Batch 元数据表。 我已经通过在我的 Spring Batch 应用程序中提供 2 个数据源成功地实现了它!

我所关心的是,如果 Spring Batch 始终启动并执行作业,内存数据库可以无限增长!

我想在我的第一份工作开始之前清除数据库表或重置内存数据库!

请帮我实现它。

【问题讨论】:

    标签: java spring spring-boot spring-batch hsqldb


    【解决方案1】:

    Spring 批处理/引导中没有提供开箱即用的实用程序。如果你真的需要截断spring批处理元数据表,你必须手动进行。

    也许,您可以定义一个单独的作业以按设定的时间间隔手动执行此操作,或者您可以添加一个单独的步骤来清除您的第一个批处理作业中的元数据表。

    【讨论】:

    • you could define a separate job to do that manually at set intervals 我也会这样做。
    • 谢谢,是的,我知道在哪里拨打清算电话或如何启动清算流程。正在寻找清除 HSQLDB 表的确切代码
    【解决方案2】:

    如果您想在作业之前或之后执行某些操作,您需要实现 JobListener 并将所需的 DAO 逻辑添加到 beforeJob() 方法中。

    我认为您不想这样做,或者为此使用 Spring Batch 的内存数据库。这些表包含所有工作和审计跟踪数据,当您接到支持电话或人们询问他们认为丢失或有问题的记录时,您将希望拥有这些数据。如果您没有该工作或审核数据,您将无法追踪发生的事情和时间。

    公共类 JobResultListener 实现 JobExecutionListener {

    public void beforeJob(JobExecution jobExecution) {
        someDao.clearBatchTables();
    }
    
    public void afterJob(JobExecution jobExecution) {
    }
    

    }

    【讨论】:

      【解决方案3】:

      HSQLDB 数据库中的数据在模式中。您可以 DROP 模式,这会删除所有表。

      DROP SCHEMA PUBLIC CASCADE
      

      或者,您可以截断模式,这样可以保留表但删除其中的数据。

      TRUNCTATE SCHEMA PUBLIC AND COMMIT NO CHECK
      

      如果您删除 PUBLIC 架构,它将被重新创建为空架构。见指南:http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_truncate_statement

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 2013-10-15
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        相关资源
        最近更新 更多