开发中的一些坑(持续更新.......)

1.Log4j不打印异常栈的问题

         情景是这样,线上发现空指针异常,但是没有打印异常栈,同事查看代码,发现打印日志的用的组件是Log4j,api是log4j中的error(Object message)方法,这个方法是不打印异常栈的,同时log4j还提供了个重载方法error(String msg,Throwe e),这个方法是可以打印异常栈的。开发代码的时候不小心用错了方法。其实出现问题的这个项目里面用到的是logback,只是log4j的jar包也在,不小心引用错了。

总结:建议使用logback,因为logback的error方法error(String msg, Throwable t)。同时一个项目里面不要引入不同的日志组件,打印日志特别是错误日志注意打印"案发现场"

2.上线打包代码不全

         同事A要上线,直接打了个本地war包,放到了线上,他忘记了同事B又修改了bug,然后也将代码提交了,导致这一部分代码没有部署到线上环境,结果可想而知,qa的回归的时候又发现了测试中的bug。


总结:线上发布版本,要直接从git上拉取,不能本地打包。或者干脆提测的版本1个tag号打出2个包,这2个包只是配置不一样.测试通过直接将这个tag的正式包放到线上!

3 包含远程服务的事务

      一个事务内部包含了几个db操作,还有1个发放代金券的接口,最后一个记录日志到db里面的操作。由于某种原因,最后一个记录db操作的方法执行错误,导致整个事务回滚,但是发放代金券的接口却没有回滚,导致了非常严重的问题,发放了代金券却没执行扣款操作。


总结:包含远程服务的事务,要格外小心整个数据的一致性,一般的做法是将远程服务放到方法最后,上面的例子显然也做到了这一点,只是没有对最后一个记录日志的操作异常捕获!也可以对整个业务块加个try-catch,发生了错误先回滚发放代金券的接口,如回滚成功,抛异常,回滚db操作!

     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值