前言

在实际开发过程中,我们的服务会分为很多个模块,这样分的好处是,系统维护的复杂性大大降低,以及编码时接口的规范性,便于我们方便阅读代码,理清项目的各个模块所负责的功能。比如我们使用swagger测试接口,是不是会在很多个模块进行使用,这样我们可以把它单独放在一个模块,其他模块要使用的时候,直接来拿,这样是不是大大简化了开发配置,以及提高了开发效率,再比如,你文件上传,和用户信息CRUD都放在一个模块开发,是不是感觉不合适,微服务的思想:有多个服务,把一个项目拆分成多个独立的服务,多个服务是独立运行的,每个服务占用独立的进程。 所以能拆即拆,模块化开发的思想设计。

在父工程中parent模块下创建子模块common

也是一个空的Maven项目,创建方式和service模块一样,删除src全部

微服务间的公共代码模块怎么管理和使用 python 微服务 公共服务_spring

在common模块下创建comon_utils子模块

主要是公共部分对后台数据返回值进行统一封装,这样其他模块也使用的时候,直接来取就好了,创建也是一个空的Maven项目,不过创建的时候注意项目路径,有时候idea可能找的不对,创建的时候需要手动修改。

微服务间的公共代码模块怎么管理和使用 python 微服务 公共服务_ci_02


比如这个路径:F:\SpringBoot_Project\itydf_parent\common_utils 这样就不对,应该是F:\SpringBoot_Project\itydf_parent\common\common_utils 还有一级目录common,这样才对,那就手动修改地址。

微服务间的公共代码模块怎么管理和使用 python 微服务 公共服务_ci_03


修改之后finish生成的结构如下,打开pom.xml文件,这里是不对的。(反正我生成的不对,需要修改红色箭头这两处)

微服务间的公共代码模块怎么管理和使用 python 微服务 公共服务_mybatis_04


修改成如下,就是artifactId节点应该是common模块,relativePath路径、common_utils模块下面没有模块了,所以应该不用添加了,直接删除

<parent>
   <artifactId>common</artifactId>
   <groupId>com.itydf</groupId>
   <version>0.0.1-SNAPSHOT</version>
</parent>

为common模块的pom.xml文件添加依赖,提供给comon_utils子模块使用

common_utils模块可能创建的时候不会引入,手动添加一下。

<modules>
    <module>common_utils</module>
</modules>

<dependencies>

    <!--spring-boot-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <scope>provided </scope>
    </dependency>

    <!--mybatis-plus-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <scope>provided </scope>
    </dependency>

    <!--lombok用来简化实体类:需要安装lombok插件-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided </scope>
    </dependency>

</dependencies>

common_utils下java目录下创建com.itydf.commonutils这个包

微服务间的公共代码模块怎么管理和使用 python 微服务 公共服务_java_05

返回结果的统一封装

ResultCode.java

***
 * 返回结果接口自定义返回状态代码
 */
public interface ResultCode {

    public static Integer SUCCESS = 20000; //成功2000

    public static Integer ERROR = 2001;  //失败2001
}

ResultBean.java

/***
 * 返回结果的统一封装
 */

@Data
public class ResultBean {

    private Boolean success;  //是否成功

    private Integer code;     //返回状态码

    private String message;   //返回消息提示

    private Map<String, Object> data = new HashMap<String, Object>(); //返回数据

    private ResultBean(){}

    public static ResultBean ok(){
        ResultBean r = new ResultBean();
        r.setSuccess(true);
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("成功");
        return r;
    }

    public static ResultBean error(){
        ResultBean r = new ResultBean();
        r.setSuccess(false);
        r.setCode(ResultCode.ERROR);
        r.setMessage("失败");
        return r;
    }

    public ResultBean success(Boolean success){
        this.setSuccess(success);
        return this;
    }

    public ResultBean message(String message){
        this.setMessage(message);
        return this;
    }

    public ResultBean code(Integer code){
        this.setCode(code);
        return this;
    }

    public ResultBean data(String key, Object value){
        this.data.put(key, value);
        return this;
    }

    public ResultBean data(Map<String, Object> map){
        this.setData(map);
        return this;
    }
}

使用测试

在service_user模块中使用common_utils模块已经封装好的统一返回值方法。


<dependencies>
   <dependency>
       <groupId>com.itydf</groupId>
       <artifactId>common_utils</artifactId>
       <version>0.0.1-SNAPSHOT</version>
       <scope>compile</scope>
   </dependency>
</dependencies>

如下图所示:

微服务间的公共代码模块怎么管理和使用 python 微服务 公共服务_java_06

CrmUserController.java中编写测试

我们修改上一篇说到的那个查询所有用户信息的接口

/***
  * 查询用户所有信息
  * @return
  */
 @GetMapping(value = "list")
 public ResultBean findAll(){
     return ResultBean.ok().data("data",crmUserService.list(null)); //无条件,查询所有
 }

输入地址:http://localhost:9901/eduservice/crm-user/list,如下也成功了。

微服务间的公共代码模块怎么管理和使用 python 微服务 公共服务_java_07