смотрите комментарии в весеннем DataSourceTransactionManager.java, функция doBegin:Должна ли автокоммутировать источник данных false?
// Switch to manual commit if necessary. This is very expensive in some JDBC drivers,
// so we don't want to do it unnecessarily (for example if we've explicitly
// configured the connection pool to set it already).
if (con.getAutoCommit()) {
txObject.setMustRestoreAutoCommit(true);
if (logger.isDebugEnabled()) {
logger.debug("Switching JDBC Connection [" + con + "] to manual commit");
}
con.setAutoCommit(false);
}
В проекте я работаю, автокоммит не настроен. Это верно по умолчанию. Мы используем Spring для управления транзакциями, и все SQL-запросы выполняются в аннотированных функциях @Transactional. Таким образом, транзакции осуществляются вручную. Каждый раз, когда начинается транзакция, соединение db устанавливается на autocommit на false, а после завершения транзакции autocommit возвращается к true. Типичным рабочим процессом будет (на уровне JDBC):
- conn = dataSource.getConnection();
- conn.setAutoCommit (false);
- stmt = conn.createStatement();
- stmt.executeQuery (...);
- conn.commit()/conn.rollback();
- conn.setAutoCommit (true);
Устанавливает ли автоколонну взад и вперед дорого? следует ли конфигурировать пул соединений datasource пул autocommit = false для повышения производительности? пропустить шаг 2 и этап 6.
Я отредактировал мой вопрос, чтобы было ясно. – ShadowDancer