3

SpringjdbcでNamedParameterJdbcTemplateを使用して1kk以上の行のバッチ挿入を実行する必要があります。したがって、私のコードは次のようになります。

public void insert(Collection<Person> entities) {
    SqlParameterSource[] params = SqlParameterSourceUtils.createBatch(entities.toArray());
    namedJdbcTemplate.batchUpdate(insertSql, params);
}

実際、私は関連する5つの異なるテーブルにバッチ挿入を使用しています。したがって、ここでの問題は、これらのテーブルの1つに約1kkの行を挿入すると、アプリになります。それらを何度も挿入しようとし、その後、OutOfMemoryErrorが発生します。バッチサイズの値(挿入後にコミットされる合計行の提供されたコレクションの行の一部)を提供しなかったためだと思いますが、NamedParameterJdbcTemplate値を使用してこのパラメーターを設定する方法がわかりません。

それとも、それをどのように達成できるかについて他の提案がありますか?

どうも

更新:構成でSimpleDataSourceとDataSourceTransactionManagerを使用しています

更新:SingleConnectionDataSourceを使用しようとし、メソッドsetAutoCommit(false)を呼び出しました。次に、上記のコードで100k行をbatchUpdateした後、次のように呼び出しました。

try {
            ((JdbcTemplate)  dbTemplate.getJdbcOperations()).getDataSource().getConnection().commit();
        } catch (SQLException e) {

}

そしてそれはうまく機能しますが、これはそのようなコードを使用する私にとっては良くありません。多分別のより良い解決策がありますか?また、1kk行の場合でも、batchUpdateを実行するのに十分なメモリがないと表示されます。

4

0 に答える 0