使用 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 方法,但目前不是。更新它,你的方法应该有效。
我需要在 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 方法,但目前不是。更新它,你的方法应该有效。