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

时间:2018-05-29 01:18:46

标签: java batch-processing jsr352

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

1 个答案:

答案 0 :(得分:0)

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

通常,数据库连接是稀缺且昂贵的资源,因此是共享资源。您不希望应用程序的任何部分长时间保持连接。因此,典型的模式是按需获取数据库连接,并在之后立即释放(关闭)。

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

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