При использовании Spring jdbcTemplate без аннотации @Transactional и свойства autocommit dataSource, установленного в true.
Каждый оператор SQL будет в своей собственной транзакции, но будут ли эти отдельные транзакции в одном и том же соединении?
В приведенном ниже фрагменте кода (с @Transactional) все три SQL операторы будут в одной и той же связи / транзакции.
@Transactional
public void test() {
jdbcTemplate.batchUpdate("INSERT INTO TB_MYTEST(MYKEY, MYVALUE) VALUES ('start', 'start')");
jdbcTemplate.batchUpdate("INSERT INTO TB_MYTEST(MYKEY, MYVALUE) VALUES ('hi', 'hi')");
jdbcTemplate.batchUpdate("INSERT INTO TB_MYTEST(MYKEY, MYVALUE) VALUES ('end', 'end')");
}
Но в следующем фрагменте кода (без @Transactional) каждый оператор SQL будет находиться в отдельной транзакции.
Как насчет связи? Будут ли все эти три отдельные транзакции находиться в одном соединении или Spring получит три разных соединения из источника данных для каждой транзакции?
public void test() {
jdbcTemplate.batchUpdate("INSERT INTO TB_MYTEST(MYKEY, MYVALUE) VALUES ('start', 'start')");
jdbcTemplate.batchUpdate("INSERT INTO TB_MYTEST(MYKEY, MYVALUE) VALUES ('hi', 'hi')");
jdbcTemplate.batchUpdate("INSERT INTO TB_MYTEST(MYKEY, MYVALUE) VALUES ('end', 'end')");
}
Есть ли способ проверить, находятся ли две транзакции в одном соединении ? Есть ли в поле подключения поле, которое можно идентифицировать?
Большое спасибо за ответ!