我正在使用Spring Batch进行大量批量操作的系统
我在内存DAO中使用SimpleJobRepository
我想知道是否有办法避免使用JobRepository?类似于无资源交易管理器的东西?
我问的原因是系统应该在没有重新启动的情况下持续运行,并且我对它将消耗的内存有一些担忧。
我知道我可以使用基于数据库的JobRepositry,但坦率地说,我根本不需要一个。
如果没有办法这样做,我会很感激,如果有人可以向我保证记忆消耗问题。
感谢。
答案 0 :(得分:3)
您必须使用作业存储库,因为它包含有关作业上下文的信息。 您案件的解决方案是 - 使用scope =“prototype”创建您的作业存储库 这将为每个作业调整一个新的内存中dao(map实现),因此没有内存问题。 每次创建新实例的开销在批处理作业方面毫无意义。
答案 1 :(得分:1)
内存中实现有一个主要缺点:您不能在批处理中使用多线程。
所以你必须使用数据库存储库。 我建议你使用H2 SQL:它是一个很轻的嵌入式数据库。 我们将它用于我们的单元测试。
它适用于Hibernate。
这种方法优于Ben的优点是你可以连接到你的内存数据库来检查作业状态(以及启动日期等)。
答案 2 :(得分:1)
我认为只要我的批处理代码是线程安全的,那么Repository是在Memory还是Database中都无关紧要。是的,如果您使用数据库,可能会失去一些集群优势,但如果我的服务器上只运行了一个批处理作业,并且使用多线程来完成其工作,那应该没问题。