我需要在Spring jdbc中使用NamedParameterJdbcTemplate执行1kk +行的批量插入。 所以我的代码是这样的:
public void insert(Collection<Person> entities) {
SqlParameterSource[] params = SqlParameterSourceUtils.createBatch(entities.toArray());
namedJdbcTemplate.batchUpdate(insertSql, params);
}
实际上我使用批量插入5个不同的表相关。所以这里的问题是,如果我在这些表上插入大约1kk的行,应用程序。尝试插入很多次,然后给我OutOfMemoryError。 我认为这是因为我没有提供批量大小值(有些行提供的总行数集合将在插入后提交),但我不知道如何通过我的NamedParameterJdbcTemplate值设置此参数。 / p>
或许还有其他建议如何实现?
THX
更新:我在配置中使用SimpleDataSource和DataSourceTransactionManager
更新:我尝试使用SingleConnectionDataSource并调用方法setAutoCommit(false)。然后,在上面代码中的100k行的batchUpdate之后,我调用了:
try {
((JdbcTemplate) dbTemplate.getJdbcOperations()).getDataSource().getConnection().commit();
} catch (SQLException e) {
}
并且效果更好,但这对我使用此类代码并不好。也许有另一个更好的解决方案?对于1kk行,它仍然表示没有内存来执行batchUpdate。