案例:转账业务追加日志
案例:转账业务追加日志
-
需求:实现任意两个账户间转账操作,并对每次转账操作在数据库进行留痕
-
需求微缩:A账户减钱,B账户加钱,数据库记录日志
-
分析:
- 基于转账操作案例添加日志模块,实现数据库中记录日志
- 业务层转账操作(transfer),调用减钱、加钱与记录日志功能
-
实现效果预期:
- 无论转账操作是否成功,均进行转账操作的日志留痕
-
存在的问题:
-
日志的记录与转账操作隶属同一个事务,同成功同失败
@Service public class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; @Autowired private LogService logService; @Override public void transfer(String out, String in, Double money) { try { accountDao.outMoney(out, money); int i = 1 / 0; accountDao.inMoney(in, money); } finally { logService.log(out, in, money); // 放在finally中保证一定运行 } } }
-
-
实现效果预期改进:
预期实现的效果: