模块结构
从技术角度分系统模块(project)分为:web,server,service,dao,scheduler。
web
包含与用户交互的html、js及css等前端代码,没有复杂的业务逻辑,业务逻辑通过dubbo调用委托给server完成。此层不能直接访问数据库。
server
按照业务功能划分,每个独立业务都有自己的server(如:member-server,account-server,repayment-server),server层通过dubbo对外提供服务。server层也不包含复杂的业务逻辑,二是委托给service层完成。
service
是真正实现业务逻辑的地方,根据是否有事务性要求,分为:普通service和事务Service。事务service中只能包括数据库调用,redis访问,zookeeper访问,不能包含其他对外通信。
dao
保存ORM代码及配置,包括自动代码生成的和开发人员手写的。由于之前MyBatis自动生成的Mapper不支持加锁语句:select for update, 加锁语句也是在dao层写的,现在MyBatis自动生成的Mapper已经可以支持加锁语句了,建议以后加锁使用Mapper实现,不要再手工写了。
public interface RepaymentLoanInfoMapper { ... RepaymentLoanInfo lockByPrimaryKey(@Param("id") String id); List<RepaymentLoanInfo> lockByExample(RepaymentLoanInfoExample example); }
scheduler
定时任务,重试任务,非实时任务等在后台跑的任务放在这里。