Jus*_*tin 12 spring transactions jta
我有一个springframework应用程序,我想在其中添加一个事务监听器到当前正在进行的事务.动机是触发通知下游系统的提交后动作.我正在使用@Transactional围绕某个服务方法包装事务 - 这是我想要创建/注册事务监听器的地方.我想做一些"喜欢"以下的事情.
public class MyService {
@Transaction
public void doIt() {
modifyObjects();
// something like this
getTransactionManager().registerPostCommitAction(new
TransactionSynchronizationAdapter() {
public void afterCommit() {
notifyDownstream();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Spring有一个TransactionSynchronization接口和适配器类,它看起来正是我想要的; 但是,如何使用当前事务或事务管理器动态注册一个,并不是很明确.如果我可以避免它,我宁愿不继承JtaTransactionManager的子类.
问:有没有人这样做过.
问:注册我的适配器最简单的方法是什么?
Jus*_*tin 29
实际上它没有我想象的那么难; spring有一个静态助手类,它将"正确"的东西放入线程上下文中.
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
s_logger.info("TRANSACTION COMPLETE!!!");
}
}
);
Run Code Online (Sandbox Code Playgroud)
您可以使用一个方面来匹配服务中的事务方法方面来完成此操作:
@Aspect
public class AfterReturningExample {
@AfterReturning("execution(* com.mypackage.MyService.*(..))")
public void afterReturning() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9241 次 |
| 最近记录: |