开发总结(财务中台项目)
1. 前言
本次负责开发银企直联(到账信息总览,到账通知,消息提醒模块等功能),前端花的时间比较多,做个总结。
2. 收获
2.1 sql中用if语句增加灵活性
比如到账信息总览的销售分析表
总体上属于分组求和,难点在于每一个列的求和条件都不一样,如果分别写sql来查询的话,那至少要写3条sql,而且查询出来之后还要用代码把查出来的数据一一拼装起来,从性能和代码量来说都不是合理的解决办法,用if语句完美的解决了这个问题。
对每一列用if语句增加不同的条件过滤数据之后再求和,而共同的条件则放在where语句。
然后因为表格中的数据的细粒度也不一样,所以用了mybatis的choose语句,来达到sql复用的目的。这样,本来要写9条sql语句来查询,现在用一条sql就解决了。
2.2 异步提高程序性能
一般来说,如果是在分布式系统中,一个服务调用其他服务都是要用异步调用来提高响应速度。
到账通知的下载功能因为要调用第三方接口,而第三方接口响应速度很慢,而业务上这个接口调用需要独占式进行,所以要用异步加分布式锁来处理。
分布式锁采用的是redis分布式锁,这样保证最多只有一个线程在调用这个接口(除非这个线程阻塞超过10分钟而导致过期了),而这里之所以没有用new一个线程来处理,而是采用只有一个线程的线程池来处理,是为了避免线程管理混乱,导致程序奔溃。