进入核心类TransactionalTemplate transactionalTemplate = new TransactionalTemplate() 的execute()核心方法
1、入参为:new TransactionalExecutor() {<br> @Override<br> public Object execute() throws Throwable {<br> return methodInvocation.proceed();<br> }<br><br> public String name() {<br> String name = globalTrxAnno.name();<br> if (!StringUtils.isNullOrEmpty(name)) {<br> return name;<br> }<br> return formatMethod(methodInvocation.getMethod());<br> }<br><br> @Override<br> public TransactionInfo getTransactionInfo() {<br> TransactionInfo transactionInfo = new TransactionInfo();<br> transactionInfo.setTimeOut(globalTrxAnno.timeoutMills());<br> transactionInfo.setName(name());<br> Set<RollbackRule> rollbackRules = new LinkedHashSet<>();<br> for (Class<?> rbRule : globalTrxAnno.rollbackFor()) {<br> rollbackRules.add(new RollbackRule(rbRule));<br> }<br> for (String rbRule : globalTrxAnno.rollbackForClassName()) {<br> rollbackRules.add(new RollbackRule(rbRule));<br> }<br> for (Class<?> rbRule : globalTrxAnno.noRollbackFor()) {<br> rollbackRules.add(new NoRollbackRule(rbRule));<br> }<br> for (String rbRule : globalTrxAnno.noRollbackForClassName()) {<br> rollbackRules.add(new NoRollbackRule(rbRule));<br> }<br> transactionInfo.setRollbackRules(rollbackRules);<br> return transactionInfo;<br> }<br> }
2、public Object execute(TransactionalExecutor business)
1、 get or create a transaction 获取或者创建一个全局事务 GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
getCurrentOrCreate()
2、// 2. get transactionInfo 获取事务信息 TransactionInfo txInfo = business.getTransactionInfo();
getTransactionInfo()
3、begin transaction 开启事务 beginTransaction(txInfo, tx);
private void beginTransaction(TransactionInfo txInfo, GlobalTransaction tx)
4、Do Your Business,执行业务逻辑 rs = business.execute();
execute()
5、the needed business exception to rollback. 回滚事 completeTransactionAfterThrowing(txInfo,tx,ex);
TransactionalTemplate#completeTransactionAfterThrowing
6、everything is fine, commit. 无异常方式,提交事务 commitTransaction(tx);
TransactionalTemplate#commitTransaction