Spring Batch , HSQLDB 随时间增长

Posted

技术标签:

【中文标题】Spring Batch , HSQLDB 随时间增长【英文标题】:Spring Batch , HSQLDB growing over the time 【发布时间】:2016-11-17 18:48:42 【问题描述】:

我正在使用 Spring Batch 来监控 Rabbit MQ。我试图通过每秒运行批处理来缓解压力。到目前为止它运行顺利,但使用的Perm Generation space 正在不断增长。批处理开始时它是30 MB,现在在30 Hours 运行之后它是300 MB。占用内存最大的对象是

org.hsqldb.persist.RowStoreAVLMemory 28619232
org.hsqldb.Database 96661000

这两个对象占总内存的 32%

任何人都可以建议如何配置 HSQLDB 不保存超过 5 分钟的信息,因为我们不需要重新启动作业。

【问题讨论】:

为作业存储库使用真实的外部数据库。 【参考方案1】:

您正在将 HSQLDB 与默认的全内存表一起使用。所有数据都保存在内存中。这种类型的表允许非常快速的操作,非常适合数据增长不超过特定限制的用例。

您可以添加一个任务来定期删除旧行。这可以是在增长的表上声明的 TRIGGER,在插入新行后根据时间戳删除旧行。

或者,您可以使用 CACHED 表,它主要将数据保存在磁盘上。您可以将;hsqldb.default_table_type=cached 添加到 JDBC 连接 URL 的末尾。在这种情况下,URL 必须指示基于文件的数据库,而不是内存中的数据库。

因此,如果您愿意,HSQLDB 可以像外部数据库一样工作。

【讨论】:

以上是关于Spring Batch , HSQLDB 随时间增长的主要内容,如果未能解决你的问题,请参考以下文章

运行基本 Spring Batch 示例时出错 - 原因:java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver

使用 Spring 进行 HSQLDB 配置 - BeanCreationException:

使用 HSQLDB 作为 Spring、Hibernate 的可移植数据库

使用 JavaConfig 使用 Spring 应用程序的 HSQLDB 新手

Spring boot 无法启动 HSQLDB

org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话。 Spring + Hibernate + HSQLDB