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

Are the open and close methods in itemreader and itemwriter the right places to open and close database connection in jsr-352 java batch job?

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

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

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

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

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