使用 JdbcTemplate 时如何正确使用 Transaction?

How to correctly use Transaction, when working with JdbcTempalte?

我需要在 Spring 中使用 JdbcTemplate

例如,我有:

void someFunction() {
  // Some logic
  sql();

}

@Transactional
void sql() {
   jdbcTemplate.batchUpdate(...);
}

据我所知,这不是交易的有效用法。

所以,我可以使用 JdbcTemplate@Transactional 注释,如下所示:

@Transactional
void someFunction() {
  // Some logic
  jdbcTemplate.batchUpdate(...);
}

还是用TransactionTemplate更好?

是的,您可以那样使用注释,但是请查看 Spring 文档中说明

的这一部分

'由于 Spring 的 AOP 框架的 proxy-based 性质,根据定义,受保护的方法不会被拦截,对于 JDK 代理(这里不适用)也不适用于 CGLIB 代理(这在技术上是可行的,但不推荐用于 AOP 目的)。因此,任何给定的切入点都将仅与 public 方法匹配!'.

因此,您的方法应该是 public 方法,但目前不是。更新它,你的方法应该有效。