java - Spring batch JdbcCursorItemReader 导致内存不足的问题
问题描述
我正在使用 Spring Batch 框架进行数据迁移。我使用的阅读器是 JdbcCursorItemReader。我将块大小设置为 500 并将读取器获取大小设置为 1000。但是当使用 spring batch 运行服务时,它似乎只是在内存中读取所有数据并用完内存。然后抛出内存不足的问题。以下是我对读者的定义:
private JdbcCursorItemReader<Map<String, Object>> buildItemReader(final DataSource dataSource, String tableName,String tenant) {
String tenantName = tenantHelper.determineTenant(tableName);
JdbcCursorItemReader<Map<String, Object>> itemReader = new JdbcCursorItemReader<>();
itemReader.setDataSource(dataSource);
itemReader.setSql("select * from " + tableName + " where " + tenantName + " ='" + tenant + "'");
itemReader.setRowMapper(new ColumnMapRowMapper());
itemReader.setFetchSize(100);
return itemReader;
}
更重要的是,从这里的spring批处理文档中,我们应该可以通过使用jdbcCursorItemReader来避免内存问题
解决方案
您可以尝试使用JdbcPagingItemReader而不是 JdbcCursorItemReader 在配置时可以设置页面大小
推荐阅读
- c++ - 资源句柄 const 正确性
- c# - 文本框只允许输入一定范围的数字,但它不接受一些正确的值
- javascript - RegEx 测试句子是否包含波兰字母表中的每个字母
- python - 将 Pandas groupby 应用于多列
- laravel - 错误:使用弹性 beanstalk 部署 Laravel 应用程序时,“/var/www/html/”的目录索引被禁止
- python-3.x - 为什么我得到这个 TypeError: unsupported format string passing to NoneType.__format__
- java - Java 我的打印在 for 或有时也无法正常工作我不知道错误,我也更改了 IDE :(
- mysql - 如何计算每个月每种客户类型的购买价值?
- reactjs - 有人知道 React Storybook 的 Knobs 插件中选择旋钮的内部工作原理吗?
- visual-studio - 尝试使用 Visual Studio 订阅访问 GitHub Enterprise Service 时出现暂时不可用状态