首页 > 解决方案 > 使用 JdbcTempalte 时如何正确使用事务?

问题描述

我需要JdbcTemplate在 Spring 中使用。

例如,我有:

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

}

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

据我了解,这不是交易的有效用法。

那么,我可以使用@Transactional注释JdbcTemplate如下:

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

还是使用TransactionTemplate更好?

标签: javaspringtransactionsjdbctemplate

解决方案


是的,您可以使用这样的注释,但是请查看 Spring 文档的这一部分

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

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


推荐阅读