Весна JDBC против JDBC - PullRequest
       4

Весна JDBC против JDBC

6 голосов
/ 09 августа 2010

Я пытался использовать Spring 3.0 SimpleJdbcTemplate, и для вставки 1500 записей требуется 5 минут, в то время как это занимает несколько секунд. вставить используя прямой JDBC. Не уверен, что я делаю не так.

Ответы [ 3 ]

6 голосов
/ 13 августа 2010

Если вы создаете пакет, рассмотрите возможность использования Spring batch - JdbcBatchItemWriter с правильными настройками размера куска, который загрузит эти 1500 записей менее чем за секунду.

1 голос
/ 15 августа 2010

Некоторые вещи стоит проверить:

  • Возможно, накладные расходы на транзакцию, управляемую Spring на уровне приложения. Посмотрите, какой менеджер транзакций вы используете (ищите бин с именем transactionManager). Если вы используете JTA, это, вероятно, где ваша проблема. Поскольку JDBC работает быстро, узким местом, похоже, не является дБ.
  • В зависимости от того, как ваше приложение использует эту транзакцию, оно может держать все в памяти, прежде чем завершит все 1500 запросов и фиксаций. Видите ли вы большую разницу в использовании памяти (у Spring должно быть намного больше)?
  • Какой пул соединений с БД вы используете в любом из случаев?

Быстрый способ профилировать ваше приложение:

Получите pid - "jps -l"

Память: jmap -histo PID (проверьте, есть ли какая-либо утечка памяти)

Проверьте, что происходит под капотом: jstack PID (ищите медленные или рекурсивные вызовы методов)

0 голосов
/ 01 апреля 2015

Как насчет использования

jdbcTemplate.batchUpdate(new String[]{sql}); 
...