博主上一篇文章介绍了sofa。
本张介绍sofa多模块的使用。
1:模块的拆分
这个层面需要使用者根据业务来定,SOFABoot 模块一般用于封装对外发布服务接口的具体实现。所以controller层建议放在root启动模块中。
2: 模块之间的关系
2.1:模块与模块之间可以发布接口,通过jvm的方式调用其他模块的接口。sofa提供了父模块的概念,用于打通两个模块的上下文,就可以使用@Autowired的方式注入父模块的bean,使用多模块的层面来说会带来一个问题,如果每个模块维护自己的数据源,那么会带来事务的问题。因为两个模块之间上下文是独立的,没办法去控制到两个模块的事务。
2.2:通过2.1我们会了解到,模块维护自己的数据源,会带来应用层面的事务问题。博主的实现是,数据源的初始化,放在root模块中,然后通过@Autowired的方式,注入到需要使用数据源的模块中。这样每个模块用的其实是一个数据源。
2.3,sofa中root模块是所有模块的父模块,所以可以直接使用@Autowired的方式去注入root模块的bean.
2.4:博主项目中使用了sharding来管理数据源和分布式事务saga,因为目前想要接触sofa的朋友都是决定sofa框架使用场景是金融级别的。会联想到分布式层面的东西。实现方式,就是在root中初始化sharding和事务,然后把DataSource注入到mapper层中配置SqlSessionFactoryBean。这样是可以实现,控制事务的。博主亲测。分库分别策略,由每个模块自己去维护,通过策略模式来去调用每个模块自己的分库分别策略实现。
3:其实大家更关心,代码里面怎么去做的。这个点,需要等几天才能更新上去,因为,目前的内容,还没有去做dome。后面会做上去的。