本篇文章只涉及到应用层面,没有涉及到什么底层原理之类的,我目前的实力还没有达到那个级别。如果是大神级别的人看到这篇文章,请跳过。
项目框架也已经是搭建好了的,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: