JdbcTemplate 可以共用一个事务吗?
Can JdbcTemplate Share a Common Transaction?
所以我最初发布了一个问题 关于我在混合 JDBC Templates/JPA 时遇到的问题。
不过我现在想知道是否有可能在 JDBC 模板操作之间共享一个公共事务?
示例将在单独的事务中更新 table 'test'。
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void storeDataInSingleTransaction(List<Test> testEntries) {
namedParameterJdbcTemplate.update("DELETE FROM test", new HashMap<>());
namedParameterJdbcTemplate.update("alter table test auto_increment = 1", new HashMap<>());
String insertTestSQL = "INSERT INTO test VALUES (:id, :name, :value)";
SqlParameterSource[] testBatch = SqlParameterSourceUtils.createBatch(testEntries.toArray());
namedParameterJdbcTemplate.batchUpdate(insertTestSQL, testBatch);
}
编辑 1:我已尝试使用事务注释手动创建 template/data 源,但对我来说没有成功。
SingleConnectionDataSource dataSource = new SingleConnectionDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
通常在 Spring 中,当您从 @Transactional 方法调用您的方法时,它应该作为单个连接执行
It is not sufficient to tell you simply to annotate your classes with the @Transactional
annotation, add @EnableTransactionManagement
to your configuration
you should apply the @Transactional annotation only to methods with public visibility
此外,要使用相同的连接,您可以在上下文中将数据源设置为 SingleConnectionDataSource
wraps a single JDBC Connection which is not closed after use.
所以我最初发布了一个问题
不过我现在想知道是否有可能在 JDBC 模板操作之间共享一个公共事务?
示例将在单独的事务中更新 table 'test'。
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void storeDataInSingleTransaction(List<Test> testEntries) {
namedParameterJdbcTemplate.update("DELETE FROM test", new HashMap<>());
namedParameterJdbcTemplate.update("alter table test auto_increment = 1", new HashMap<>());
String insertTestSQL = "INSERT INTO test VALUES (:id, :name, :value)";
SqlParameterSource[] testBatch = SqlParameterSourceUtils.createBatch(testEntries.toArray());
namedParameterJdbcTemplate.batchUpdate(insertTestSQL, testBatch);
}
编辑 1:我已尝试使用事务注释手动创建 template/data 源,但对我来说没有成功。
SingleConnectionDataSource dataSource = new SingleConnectionDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
通常在 Spring 中,当您从 @Transactional 方法调用您的方法时,它应该作为单个连接执行
It is not sufficient to tell you simply to annotate your classes with the
@Transactional
annotation, add@EnableTransactionManagement
to your configurationyou should apply the @Transactional annotation only to methods with public visibility
此外,要使用相同的连接,您可以在上下文中将数据源设置为 SingleConnectionDataSource
wraps a single JDBC Connection which is not closed after use.