Jakarta ee Spring批处理无资源JobRepository

Jakarta ee Spring批处理无资源JobRepository,jakarta-ee,spring-batch,Jakarta Ee,Spring Batch,我将SpringBatch用于一个执行大量批处理操作的系统。 我将SimpleJobRepository与内存中的DAO一起使用。 我想知道是否有办法避免使用JobRepository?类似于无资源事务管理器的东西? 我问这个问题的原因是,系统应该在不重新启动的情况下持续运行,而且我担心它会消耗内存。 我知道我可以使用基于数据库的JobRepository,但坦率地说,我根本不需要它 如果没有办法,如果有人能向我保证内存消耗问题,我将不胜感激 谢谢。您必须使用作业存储库,因为它包含有关作业上下文

我将SpringBatch用于一个执行大量批处理操作的系统。 我将SimpleJobRepository与内存中的DAO一起使用。 我想知道是否有办法避免使用JobRepository?类似于无资源事务管理器的东西? 我问这个问题的原因是,系统应该在不重新启动的情况下持续运行,而且我担心它会消耗内存。 我知道我可以使用基于数据库的JobRepository,但坦率地说,我根本不需要它

如果没有办法,如果有人能向我保证内存消耗问题,我将不胜感激


谢谢。

您必须使用作业存储库,因为它包含有关作业上下文的信息。 你的情况的解决办法是—— 使用scope=prototype创建作业存储库 这将为每个作业创建一个新的内存dao映射实现,因此没有内存问题。
每次创建新实例的开销对于批处理作业来说毫无意义。

内存内实现有一个主要缺点:不能在批处理中使用多线程

因此,您必须使用数据库存储库。 我建议您使用H2SQL:它是一个嵌入式数据库,非常轻巧。 我们使用它进行单元测试

它与Hibernate配合得很好


与Ben的方法相比,这种方法的优点是,您可以连接到内存数据库以检查作业状态和启动日期等。

我认为,只要批处理代码是线程安全的,存储库是在内存中还是在数据库中都不重要。是的,如果您使用DB,您可能会失去一些群集优势,但如果我的服务器上只运行一个批处理作业,并且它使用多线程来完成其工作,那应该没问题。

我真的不需要检查作业状态等'。。如果您能详细说明为什么在使用内存中的作业存储库时多线程是一个问题,那就太好了。无论如何,我想减少内存使用,所以内存中的DB对我来说不是一个好的选择。内存中的实现不是线程安全的,这就是为什么不能将它与多线程结合使用。在最新版本中,内存中的实现现在是线程安全的:我尝试了这种方法,但没有效果。它不断抛出IllegalStateExceptions,因为新存储库为空,所以不会保存作业执行。还尝试了原型JobLauncher和JobRepository,获得了相同的结果。