Davco跨模块调用服务
需要使用的SQL
select doc.code from BASE_CUST_DOC_DEF doc where doc.id = (select SHOP_TYPE from BASE_CUSTOMER_EXT where id =(select CHANNEL_CUSTOMER_ID from occ_iuap_72.APP_USER " +
" where LOGIN_NAME =? ));
我们这里将这SQL根据所在的数据库分为两部分
访问occ_base数据库的
select doc.code from BASE_CUST_DOC_DEF doc where doc.id = (select SHOP_TYPE from BASE_CUSTOMER_EXT where id = ?);
访问occ_iuap数据库的
select CHANNEL_CUSTOMER_ID from occ_iuap_72.APP_USER where LOGIN_NAME =?;
因为要访问不同数据库,所以我们要进行跨模块访问,下面说明两个模块的代码
Base模块代码
Repository层
这里写的SQL还不是很规范,因为使用的是原生的SQL,后面要使用JPA映射到对应表的实体类上面
Service层
没啥特别的,注入repository调用服务即可
Controller层
这里,先调用了Client端来获取另外一个模块先,然后根据返回值再调用自己的service,下面说一下Client端是干什么的
Client端与Api
整体模块大概如上所示,我个人理解这大概是一种公司规范
代码如下
步骤如下
- 使用FeignClient注解,给value加上要调用哪个服务的名字(对应配置文件里面的server.name)
- 继承了cmpt-api模块的api接口**(调用的方法全在api接口里面,所以client是不需要写任何方法的)**
因为要继承cmpt-api模块的api接口,所以记得在Base模块导入cmpt-api模块的依赖,公司规范是对外开发的API是另一个新建模块
下面贴上api代码
里面其实对其他模块开放的接口,对应的实现类就是在被调用模块的Rest里
进入到Rest其实就是进入另一个模块里面了
Cmpt模块代码
我们直接从Rest来进入到Cmpt模块
注意,这个实现类里面的接口要跟Api里面一致的,另一个模块被调用的具体服务就在里面
Service层代码
我这里是方法里面就执行另一个模块服务而已,这里不太规范,直接执行了SQL,应该是要放在Repository层实现的