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 新手
org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话。 Spring + Hibernate + HSQLDB