java - itemreader 和 itemwriter 中的打开和关闭方法是在 jsr-352 java 批处理作业中打开和关闭数据库连接的正确位置吗?
问题描述
itemreader 和 itemwriter 中的打开和关闭方法是在 jsr-352 java 批处理作业中打开和关闭数据库连接的正确位置吗?我在规范中找不到何时调用这两种方法,尤其是在特殊情况下
解决方案
数据库是批处理作业的众多数据源之一,因此批处理规范不会规定特定于数据库连接的要求。您的问题的答案很大程度上取决于您如何实现 jdbc 项目阅读器和 jdbc 项目编写器。
一般来说,数据库连接是稀缺且昂贵的资源,因此是共享资源。您不希望应用程序的任何部分长时间保持连接。所以一个典型的模式是按需获取数据库连接,然后立即释放(关闭)它。
现在看看 jdbc item reader 和 jdbc item writer 的生命周期。它们属于一个步进执行,因此它们的生命将跨越整个步进执行。长时间保持连接不是一个好主意,特别是对于jdbc item writer中用于更新数据库记录的连接。例如,在实现JdbcItemWriter时,我们选择在准备好写入数据块时按需获取连接,并在使用后立即释放连接(即不在open
orclose
方法中)。在这种情况下,无需保持块之间的连接打开。
对于JdbcItemReader,我们选择在 item readeropen
方法中打开连接并在方法中关闭它close
。这是因为我们的实现是基于一个实时的 jdbcResultSet
来持续获取数据的。当然,其他实现可以选择缓存或分离数据,因此不依赖 live ResultSet
,而是使用按需模式来更好地利用资源。
推荐阅读
- c# - FileSystemWatcher Not recognizing change in directory
- mysql - 在mysql中创建逻辑表达式以从表中提取数据
- mysql - MySQL查询未提供所需的输出
- gradle - 使用 Kotlin MPP 插件时,简单和源集依赖之间有什么区别?
- python - 使用字符串值进行数据帧切片
- python - 如何改进/修改特征匹配的参数 - SIFT SURF - Opencv
- java - 我将如何允许它通过每个元素来检查它是否相等?
- python - 使用带有列作为附加索引的 pandas 创建多索引和转置数据
- javascript - Is there a way for me to get more than 1,000 entries from a fetch command in React?
- excel - How Do I Close the Excel Application if I Only Have a Worksheet Reference Returning from a PowerShell Function?