一.Memcache作为分布式锁
github参考样例:
https://github.com/jht5945/distributed-lock-sample
二.事务的应用, 多表修改
业务层方法名加上:
@Transactional(rollbackFor = Exception.class)
需要回滚的地方需要抛异常:
throw new RuntimeException("recharge update rechargeRecord error");
样例:
@Transactional(rollbackFor = Exception.class)
@Override
public OrderDO recharge(RechargeInfo rechargeInfo) throws RuntimeException {
if (rechargeInfo.getCentMoney() == null || rechargeInfo.getCentMoney() <= 0) {
LoggerUtil.error(log, "[ERROR-IN-XXX] money error rechargeInfo:{}",
JSON.toJSONString(rechargeInfo));
throw new RuntimeException("recharge money null");
}
RechargeInfo rechargeInfo = new RechargeInfo();
return rechargeInfo;
}
三.循环依赖问题:实现类调另一个实现类里的异步方法,并且这两个实现类相互有依赖,会引发循环依赖问题
@Override
@Async
public void getXXXFileId(){
}
四.Qualifier应用,多个实现类实现同一个接口时,用注解的形式实现调用
调用方需要申明:
@Autowired
@Qualifier("OrderDataServiceImpl")
DataService orderDataService;
被调用方需要申明:
@Service("OrderDataServiceImpl")
public class OrderDataServiceImpl implements DataService {
}
五.日志规范:
private static final Logger logger = LoggerFactory.getLogger(XXXServiceImpl.class.getName());
private static final String LOG_INFO = "[XXX-SERVICE-INFO] ";
private static final String LOG_WARN = "[XXX-SERVICE-WARN] ";
private static final String LOG_ERROR = "[XXX-SERVICE-ERROR] ";
LoggerUtil.info(logger, LOG_INFO + "Enter XXXServiceImpl.aMethodName(), aObject:{} | bObject:{}", JSON.toJSONString(aObject, false), JSON.toJSONString(bObject, false));
LoggerUtil.warn(logger, LOG_WARN + "bMethiodName(), Id:{}", Id);
LoggerUtil.error(e, logger, LOG_ERROR + "cMethiodName() abcObject:{}", JSON.toJSONString(abcObject, false));