java 多个项目间事物_Java-web-多个独立项目之间相互调用实践

本文介绍了在Spring Boot 1.5和Oracle数据库环境下,如何实现在多个独立项目间通过RESTful接口进行相互调用。使用RestTemplate进行API调用,处理不同数据源,解决分页数据转换问题。通过自定义工具类AnalysisGBaseDataUtils进行参数校验、数据解析,确保调用和返回数据的正确性。对于多服务器部署的情况,引入Feign进行服务间调用,满足高并发需求。
摘要由CSDN通过智能技术生成

本篇文章只涉及到应用层面,没有涉及到什么底层原理之类的,我目前的实力还没有达到那个级别。如果是大神级别的人看到这篇文章,请跳过。

项目框架也已经是搭建好了的,springboot版本为1.5,数据库操作使用的是Mybatis,数据库使用的Oracle,前端使用VUE,Node.js打包之类的。由于

实际需要,要在多个项目之间相互调用,其中一种方式是访问一个固定的项目,只有一台服务器;还有一种方式是调用一个项目,该项目部署了多台服

务器。

调用方式一

通过一个项目调用另外一个项目,调用地址固定,调用方式为通过  RestTemplate 这个类来进行调用,由spring提供。这样调用的原因是当前这个

项目中有不同的数据源,除了Oracle的还有其他的数据库,可是其他的数据库连接资源有限,除了我们负责的子项目在调用外,其他人也在进行调用。

所以最后就将被调用方做成了一个单独的服务,让其他系统之间可以直接调用。大致的实现方式为拿到传递的参数,通过反射的方式拿到对应的service

实现类,然后通过serviceImpl调用Mapper.java中的方法执行增、删、改、查操作,最后将返回的结果返回给调用方。请求时参数的传递方式为通过

Map传输,被调用方通过Map可以直接获取到参数信息。然后通过自定义的JSON工具类来解析数据,分为单个对象

数据、列表数据、分页数据。经过反复的调试,最终很好的实现了需求,解决了当前项目中存在的问题。

解析返回参数的工具类为//

@Slf4j

@Component

@Scope(value = "singleton")//显示单例

public class AnalysisGBaseDataUtils implements InitializingBean {

//私有化构造方法

private AnalysisGBaseDataUtils(){}

private static RestTemplate restTemplate = new RestTemplate();

private static String gbaseApi;

@Value("${gbase.api.prefix}")

private String getGbaseApi;

@Override

public void afterPropertiesSet() throws Exception {

AnalysisGBaseDataUtils.gbaseApi = this.getGbaseApi;

}

/**

* @Description: 方法参数校验

* @author: 1

* @date: 2020-9-5 10:13:10

* @param: @param

* @param: @param dataMap

* @param: @param e

* @param: @return

* @return: String

*/

private static String paramValidate(Map dataMap, E e) {

if(Objects.equal(dataMap, null)) {

throw new BaseException(MessageConstant.A000001, "dataMap参数错误");

}

if(Objects.equal(e, null)) {

throw new BaseException(MessageConstant.A000001, "E类型参数错误");

}

if(Objects.equal(dataMap.get("methodName"), null)) {

throw new BaseException(MessageConstant.A000001, "dataMap中methodName参数不能为null!");

}

if(Objects.equal(dataMap.get("serviceId"), null)) {

throw new BaseException(MessageConstant.A000001, "dataMap中serviceId参数不能为null!");

}

String methodName = (String)dataMap.get("methodName");

String serviceId = (String)dataMap.get("serviceId");

if(StringUtils.isBlank(methodName)) {

throw new BaseException(MessageConstant.A000001, "dataMap中methodName参数错误!");

}

if(StringUtils.isBlank(serviceId)) {

throw new BaseException(MessageConstant.A000001, "dataMap中serviceId参数错误!");

}

return methodName;

}

/**

* @Description: 抽取列表数据解析方法

* @author: 1

* @date: 2020-9-5 10:13:30

* @param: @param

* @param: @param methodName

* @param: @param resultStr

* @param: @param e

* @param: @return

* @return: List extends Object>

*/

private static List extends Object> analysisData(String methodName, String resultStr, E e) {

List extends Object> parseArray = JsonUtils.parseArray(resultStr,"data", e.getClass());

return parseArray;

}

/**

* @Description: 解析分页数据:新方法,使用更方便(直接传入 class 对象),备用

* @author: 1

* @date: 2020-9-21 21:41:03

* @param: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值