sc_*_*ray 6 java spring transactions internals
情况如下:
Method1中有四种数据库更新方法.Method1使用Spring事务管理语义进行注释.
Method2中有一个数据库读取方法,并在Method1完成所有数据库更新后调用它.Method2也使用Spring事务语义进行注释.
有一个Web请求进入,控制器拦截请求并调用method1然后调用method2.
事务也包含在Web请求中.
我有兴趣知道的是:
1. Spring如何知道在成功交易时提交数据库更新?是否有一些引用进行事务管理的Spring实现?
2.由于我们有一个事务层次结构:围绕web-request-> Transaction with Propagation的事务= RequestNew for Method1-> Transaction with Propagation = Method2是必需的,Spring如何进行事务管理以确保事务在正确的上下文与正确的顺序?
简而言之,通过游戏来了解Spring如何在其所有最复杂的细节中执行事务管理或者不仅仅是手动挥动以JTA或其他缩写为中心的解释的文档的参考将是很棒的.
谢谢
San*_*osh 10
让我们做一些基本的陈述.
在这里,我重用上面的@stacker给出的示例
MyClass{
@Transactional
public void sequence() {
method1();
method2();
}
@Transactional
void method1() {
}
@Transactional(propagation=Propagation.REQUIRES_NEW)
void method2() {
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用xml配置实现相同的功能.让我们把它作为它的流行和广泛使用.
在部署时
applicationContext.xml)并根据配置扫描代码以进行@Transactional注释(假设配置被称为基于注释). 在上面的例子的伪代码中表示相同
ProxyMyClass{
MyClass myclass;
.
.
.
sequence(){
//Transaction Advisor code (Typically begin/check for transaction)
myclass.sequence();
//Transaction Advisor code(Typically rollback/commit)
}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)这就是春季经理人的交易方式.虽然稍微过于简单化了.
现在回答你的问题,
Spring如何知道在成功交易时提交数据库更新?是否有一些引用进行事务管理的Spring实现?
每当你在事务下调用一个方法时,你实际上调用一个代理,它首先执行事务顾问(它将开始事务),然后你调用实际的业务方法,一旦完成,另一个事务顾问执行(这取决于返回的方法) ,将提交或回滚事务).
由于我们有一个事务层次结构:围绕web-request-> Transaction with Propagation的事务= RequestNew for Method1-> Transaction with Propagation = Method2是必需的,Spring如何进行事务管理以确保事务在适当的上下文中执行订单是否正确?
在事务层次结构的情况下,spring框架会相应地生成Transaction Advisor检查.对于你提到的例子,

希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
2854 次 |
| 最近记录: |