使用NamedParameterJdbcTemplate设置批处理大小

时间:2012-09-27 18:52:29

标签: java spring jdbc jdbctemplate

我需要在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。

0 个答案:

没有答案