零零碎碎日常知识点总结

一.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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值