未使用注释驱动的管理器注释为@Transactional的方法会发生什么

时间:2014-03-13 20:44:36

标签: spring-annotations transactional autocommit

有人能告诉我们在未注释为@Transactional但是事务管理器是注释驱动的方法中对数据库表所做的更改会发生什么变化?

我们假设它自动提交为true或false。如果auto commit为true,那么在方法完成后是否会立即提交数据更改?

感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:0)

这实际上取决于调用堆栈以及您在该方法中执行的操作。如果您正在使用JdbcTemplateDataSourceUtils之类的内容,则未注释的方法可能会重用在调用堆栈层次结构中较高的事务的上下文。同样,如果您的方法尝试直接在非托管DataSource上查找连接,那么即使是使用注释标记的方法也不会为您提供预期的结果。

假设您的方法没有尝试直接访问某些资源,您的非注释方法可能是也可能不是事务性的,这取决于它的调用堆栈,这可能是您想要避免的,除非您知道在哪个上下文中调用此方法。

在侧节点上,有多种方法可以确保在输入带注释的方法之前事务上下文处于适当的阶段,有关详细信息,请参阅javadoc of Propagation