Создать соединение без @Transactional? - PullRequest
0 голосов
/ 27 апреля 2020

При использовании 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')");

}

Есть ли способ проверить, находятся ли две транзакции в одном соединении ? Есть ли в поле подключения поле, которое можно идентифицировать?

Большое спасибо за ответ!

...