Spring Boot集成Dubbo多模块项目创建与配置

概述

dubbo是一个分布式服务框架,致力于提供高性能透明化RPC远程调用方案,提供SOA服务治理解决方案。
maven多模块项目通常由一个父模块和若干个子模块构成,每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块)相互关联。多模块适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。

使用工具

IDEA2018.2 JDK1.8

环境搭建

1.父模块创建

首先我们在IDEA中创建一个spring boot工程作为父项目。
一、选择Spring Initializr,默认使用的Java版本是1.8。
在这里插入图片描述
在这里插入图片描述
点击Next,进入下一个界面,填写工程名,并选择工程所在目录。填写完成后,点击Finish,即可创建一个spring boot项目。
在这里插入图片描述

2.创建子模块

在上面创建好的parent-module工程名上,点击右键,选择New–>Module,进入New Module页面。
在这里插入图片描述
创建Name为springboot-dubbo-server的子模块,后面其他的参数都可参照父模块的参数设置。
在这里插入图片描述
创建Name为springboot-dubbo-client的子模块,其他参数设置参照上步。
在这里插入图片描述
以上3个模块创建完成之后,整个项目的目录结构如下图所示。
因为此处的父模块只做依赖管理,不需要编写代码。
在这里插入图片描述

多模块项目配置

一、 父模块pom配置

父pom是为了抽取统一的配置信息和依赖版本控制,方便子pom直接引用,简化子pom的配置。

1.继承设置

继承是maven中很强大的一种功能,继承可以使子pom获得parent中的各项配置,对子pom进行统一的配置和依赖管理。
maven项目之间的继承关系通过表示。这里使用的开发框架是spring boot,默认继承spring-boot-starter-parent。

2.使用dependencyManagement管理依赖版本号

一般在项目最顶层的父pom中使用该元素,让所有子模块引用一个依赖而不用显式的列出版本号。maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

3.使用properties控制依赖包的版本号,便于版本维护

在properties标签中,添加各依赖包的版本号,然后在dependency中直接引用该依赖版本号的值即可。

parent-module模块

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>parent-module</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>  <!--父模块打包类型必须为pom-->

    <modules>
        <module>springboot-dubbo-server</module>  <!--对子项目springboot-dubbo-server的聚合-->
        <module>springboot-dubbo-client</module>  <!--对子项目springboot-dubbo-client的聚合-->
    </modules>

    <name>parent-module</name> <!--父项目的项目名-->
    <description>Demo project for Spring Boot</description>

   <!--spring boot 父依赖-->
    <parent> <!-- parent指明继承关系,给出被继承的父项目的具体信息-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>

        <!-- 在properties中统一控制依赖包的版本,更清晰-->
        <dubbo.version>2.5.3</dubbo.version>
        <zkclient.version>0.10</zkclient.version>
    </properties>

    <dependencyManagement>   <!--dependencyManagement用于管理依赖版本号-->
        <dependencies>
            <!--新增后续dubbo项目中所需依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
               <!-- 把dubbo自带的spring版本排除掉-->
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>
        </dependencies>

    </dependencyManagement>
</project>

二、子模块pom配置

1.继承设置

子模块的parent要继承父模块.

扫描二维码关注公众号,回复: 11333470 查看本文章

2.依赖设置

父模块pom中使用dependencyManagement来管理的依赖,在子模块pom中就不需要再写版本号了,exclusion元素也不需要再写。

springboot-dubbo-server模块

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>springboot-dubbo-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springboot-dubbo-server</name>  <!--子项目的项目名-->
    <description>Demo project for Spring Boot</description>

    <!-- 子模块继承的父模块-->
    <parent>
      <groupId>com.example</groupId>
        <artifactId>parent-module</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--新增后续dubbo项目中所需依赖
           父模块pom中使用dependencyManagement来管理依赖版本号,子模块pom中不需要再写版本号,exclusion也不需要-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
   </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <!--<version>0.10</version>-->
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

springvoot-dubbo-client模块

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>springboot-dubbo-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springboot-dubbo-client</name> <!--子项目的项目名-->
    <description>Demo project for Spring Boot</description>

    <!-- 子模块继承的父模块-->
    <parent>
      <groupId>com.example</groupId>
        <artifactId>parent-module</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

       <!--spring boot配置web的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--新增后续dubbo项目中所需依赖
           父模块pom中使用dependencyManagement来管理依赖版本号,子模块pom中不需要再写版本号
           父模块pom中里有exclusion,子模块pom中不要写exclusion-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
    </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>

        <!--client模块需要依赖server模块-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>springboot-dubbo-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

三、关于exclusions标签

当dependency A自身的依赖B,与其他dependency存在冲突的时候(最常见的就是版本冲突),我们就需要把B排除掉,这时就需要使用exclusions元素。

  1. 通过mvn dependency:tree命令查看依赖树在这里插入图片描述
  2. 使用IDEA查看依赖树
    点击IDEA右侧的Maven Projects,在每个模块的Dependencies中即可查看每个dependency内部的依赖及版本号,来识别哪些依赖需要被排除掉。

以dubbo为例,我们先删除配置,打开Maven
在这里插入图片描述
在这里插入图片描述
Projects,可以看到2.5.3版本的dubbo中使用的spring版本是2.5.6,现在在用的spring版本一般都是4.*的,所以我们需要把它排除掉,避免后续报错。

在这里插入图片描述
删除dubbo中的spring版本后,添加exclusions标签
在这里插入图片描述
要查看当前项目中使用的spring版本,可以ctrl+左键,然后点击父pom中的值。
在这里插入图片描述
ctrl+左键,然后点击父pom中的值,进入更上一层pom:
在这里插入图片描述
可以看到spring的版本是4.3.12:
在这里插入图片描述

效果展示

点开右侧Maven Projects,双击父模块Lifecycle中的compile,进行代码编译,或者直接在Terminal中执行命令:mvn compile。
编译通过
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44989881/article/details/102635903