首页 > 解决方案 > itemreader 和 itemwriter 中的打开和关闭方法是在 jsr-352 java 批处理作业中打开和关闭数据库连接的正确位置吗?

问题描述

itemreader 和 itemwriter 中的打开和关闭方法是在 jsr-352 java 批处理作业中打开和关闭数据库连接的正确位置吗?我在规范中找不到何时调用这两种方法,尤其是在特殊情况下

标签: javabatch-processingjsr352

解决方案


数据库是批处理作业的众多数据源之一,因此批处理规范不会规定特定于数据库连接的要求。您的问题的答案很大程度上取决于您如何实现 jdbc 项目阅读器和 jdbc 项目编写器。

一般来说,数据库连接是稀缺且昂贵的资源,因此是共享资源。您不希望应用程序的任何部分长时间保持连接。所以一个典型的模式是按需获取数据库连接,然后立即释放(关闭)它。

现在看看 jdbc item reader 和 jdbc item writer 的生命周期。它们属于一个步进执行,因此它们的生命将跨越整个步进执行。长时间保持连接不是一个好主意,特别是对于jdbc item writer中用于更新数据库记录的连接。例如,在实现JdbcItemWriter时,我们选择在准备好写入数据块时按需获取连接,并在使用后立即释放连接(即不在openorclose方法中)。在这种情况下,无需保持块之间的连接打开。

对于JdbcItemReader,我们选择在 item readeropen方法中打开连接并在方法中关闭它close。这是因为我们的实现是基于一个实时的 jdbcResultSet来持续获取数据的。当然,其他实现可以选择缓存或分离数据,因此不依赖 live ResultSet,而是使用按需模式来更好地利用资源。


推荐阅读