springboot的maven多模块项目架构微服务搭建——构建多模块项目(依赖方式)
总想对微服务架构做一个小小的总结,不知如何下手,最近觉得还是从搭建微服务的过程来入手,对于springboot的maven项目从构建多模块架构进而衍化为常用的微服务架构来做个记录吧。
首先,创建多个springboot项目,项目结构如图:
裁剪后如右侧
创建完成后,先解释一下:sharp-pom是父类工程,其他所有工程都要继承该工程,sharp-pom主要用来管理版本和声明一些jar的引用,本博主没有做聚合工程,这里说明一下聚合和继承的关系:继承是父POM为了抽取统一的配置信息和依赖版本控制,方便子POM直接引用,简化子POM的配置。聚合(多模块)则是为了方便一组项目进行统一的操作而作为一个大的整体,所以要真正根据这两者不同的作用来使用,不必为了聚合而继承同一个父POM,也不比为了继承父POM而设计成多模块。
接下来对各个模块进行处理
sharp-pom 只需要保留pom.xml文件即可,注意打包方式一定选择pom,具体内容如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.sharp</groupId> 7 <artifactId>sharp-pom</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>pom</packaging> 10 11 <name>sharp-pom</name> 12 <description>Demo project for Spring Boot</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.1.0.RELEASE</version> 18 <relativePath/> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <project.version>0.0.1-SNAPSHOT</project.version> 25 <java.version>1.8</java.version> 26 <mysql.version>8.0.12</mysql.version> 27 <mybatis.spring.version>1.3.2</mybatis.spring.version> 28 <jdbc.version>5.1.1.RELEASE</jdbc.version> 29 <druid.version>1.1.10</druid.version> 30 <skipTests>true</skipTests> 31 </properties> 32 <!-- dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)dependencyManagement里只是声明依赖,并不实现引入, 33 因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会 34 从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。 --> 35 <!-- 这里只是声明,子项目中用到时候应用不需要再次引入版本号,统一在此管理了版本 --> 36 <dependencyManagement> 37 <dependencies> 38 <dependency> 39 <groupId>com.alibaba</groupId> 40 <artifactId>druid</artifactId> 41 <version>${druid.version}</version> 42 </dependency> 43 <dependency> 44 <groupId>org.springframework</groupId> 45 <artifactId>spring-jdbc</artifactId> 46 <version>${jdbc.version}</version> 47 </dependency> 48 <dependency> 49 <groupId>mysql</groupId> 50 <artifactId>mysql-connector-java</artifactId> 51 <version>${mysql.version}</version> 52 </dependency> 53 <dependency> 54 <groupId>org.mybatis.spring.boot</groupId> 55 <artifactId>mybatis-spring-boot-starter</artifactId> 56 <version>${mybatis.spring.version}</version> 57 </dependency> 58 </dependencies> 59 <!-- 私服配置,子项目继承后不需要在子项目中配置 --> 60 </dependencyManagement> 61 <distributionManagement> 62 <repository> 63 <id>my-release</id> 64 <url>http://192.168.135.128:8081/repository/maven-releases/</url> 65 </repository> 66 <snapshotRepository> 67 <id>my-snapshots</id> 68 <url>http://192.168.135.128:8081/repository/maven-snapshots/</url> 69 </snapshotRepository> 70 </distributionManagement> 71 </project>
接下来的common、entity、mapper三个项目主要作为后面的依赖包均不需要启动类和测试类,都可以直接干掉,其中mapper有配置文件故而也要保留src/main/resources目录,其他两项只需要保留src/main/java即可,这些项目打包后是一个很普通的jar包,所以pom中不需要引入maven的打包插件,如果引入的话启动会报错。。。java:[1,17] 找不到符号、程序包。。。不存在之类的,因为只是一个普通包,我们直接把它干掉就行
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
然后层层依赖,没有什么特别的,需要注意的是,非微服务的多模块,controller层直接依赖service层,所以service层不需要启动,service层也可以直接搞成如common、entity一样的结构,只是一个普通的依赖包即可,如果是作为微服务的一个服务,那么它要想注册中心注册,就需要在该项目进行相关数据库、mybatis及dubbo、zookeeper等的配置,现在这一步我们只是作为一个普通jar包依赖,故而相关数据库等的配置都在访问层进行即在sharp-user项目中进行配置。
common项目pom,除了pom暂时无其他内容
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <parent> 7 <groupId>com.sharp</groupId> 8 <artifactId>sharp-pom</artifactId> 9 <version>0.0.1-SNAPSHOT</version> 10 </parent> 11 <artifactId>sharp-common</artifactId> 12 <packaging>jar</packaging> 13 14 <name>sharp-common</name> 15 <description>公共模块</description> 16 17 18 <dependencies> 19 <dependency> 20 <groupId>org.springframework.boot</groupId> 21 <artifactId>spring-boot-starter</artifactId> 22 </dependency> 23 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-test</artifactId> 27 <scope>test</scope> 28 </dependency> 29 </dependencies> 30 <!-- <build> 31 <plugins> 32 <plugin> 33 <groupId>org.springframework.boot</groupId> 34 <artifactId>spring-boot-maven-plugin</artifactId> 35 </plugin> 36 <plugin> 37 <groupId>org.apache.maven.plugins</groupId> 38 <artifactId>maven-surefire-plugin</artifactId> 39 <version>2.6</version> 40 <configuration> 41 <skipTests>true</skipTests> 42 </configuration> 43 </plugin> 44 </plugins> 45 </build> --> 46 </project>
entity pom
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.sharp</groupId> <artifactId>sharp-pom</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>sharp-entity</artifactId> <packaging>jar</packaging> <name>sharp-entity</name> <description>Demo project for Spring Boot</description> <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> <dependency> <groupId>com.sharp</groupId> <artifactId>sharp-common</artifactId> <version>${project.parent.version}</version> </dependency> </dependencies> <!-- <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.6</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build> --> </project>
mapper项目无特别之处
pom
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>com.sharp</groupId> 7 <artifactId>sharp-pom</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 </parent> 10 <artifactId>sharp-mapper</artifactId> 11 <packaging>jar</packaging> 12 13 <name>sharp-mapper</name> 14 <description>Demo project for Spring Boot</description> 15 16 <dependencies> 17 <dependency> 18 <groupId>com.sharp</groupId> 19 <artifactId>sharp-common</artifactId> 20 <version>${project.parent.version}</version> 21 </dependency> 22 <dependency> 23 <groupId>com.sharp</groupId> 24 <artifactId>sharp-entity</artifactId> 25 <version>${project.parent.version}</version> 26 </dependency> 27 <dependency> 28 <groupId>org.springframework.boot</groupId> 29 <artifactId>spring-boot-starter</artifactId> 30 </dependency> 31 <dependency> 32 <groupId>org.mybatis.spring.boot</groupId> 33 <artifactId>mybatis-spring-boot-starter</artifactId> 34 </dependency> 35 <dependency> 36 <groupId>org.springframework.boot</groupId> 37 <artifactId>spring-boot-starter-test</artifactId> 38 <scope>test</scope> 39 </dependency> 40 </dependencies> 41 42 <!-- <build> 43 <plugins> 44 <plugin> 45 <groupId>org.springframework.boot</groupId> 46 <artifactId>spring-boot-maven-plugin</artifactId> 47 </plugin> 48 <plugin> 49 <groupId>org.apache.maven.plugins</groupId> 50 <artifactId>maven-surefire-plugin</artifactId> 51 <version>2.6</version> 52 <configuration> 53 <skipTests>true</skipTests> 54 </configuration> 55 </plugin> 56 </plugins> 57 </build> 58 --> 59 60 </project>
service-api pom
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <artifactId>sharp-service-api</artifactId> 7 <packaging>jar</packaging> 8 9 <name>sharp-service-api</name> 10 <description>Demo project for Spring Boot</description> 11 12 <parent> 13 <groupId>com.sharp</groupId> 14 <artifactId>sharp-pom</artifactId> 15 <version>0.0.1-SNAPSHOT</version> 16 </parent> 17 18 <properties> 19 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 20 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 21 <java.version>1.8</java.version> 22 </properties> 23 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter</artifactId> 28 </dependency> 29 <dependency> 30 <groupId>com.sharp</groupId> 31 <artifactId>sharp-entity</artifactId> 32 <version>${project.parent.version}</version> 33 </dependency> 34 <dependency> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-starter-test</artifactId> 37 <scope>test</scope> 38 </dependency> 39 </dependencies> 40 41 42 </project>
service pom
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>com.sharp</groupId> 7 <artifactId>sharp-pom</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 </parent> 10 <artifactId>sharp-service</artifactId> 11 <packaging>jar</packaging> 12 13 <name>sharp-sevice</name> 14 <description>Demo project for Spring Boot</description> 15 <dependencies> 16 <!-- <dependency> 17 <groupId>org.springframework.boot</groupId> 18 <artifactId>spring-boot-starter-amqp</artifactId> 19 </dependency> 20 <dependency> 21 <groupId>org.springframework.boot</groupId> 22 <artifactId>spring-boot-starter-data-mongodb</artifactId> 23 </dependency> 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-data-redis</artifactId> 27 </dependency> --> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-web</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>com.alibaba</groupId> 34 <artifactId>druid</artifactId> 35 </dependency> 36 <dependency> 37 <groupId>org.springframework</groupId> 38 <artifactId>spring-jdbc</artifactId> 39 </dependency> 40 <dependency> 41 <groupId>com.sharp</groupId> 42 <artifactId>sharp-entity</artifactId> 43 <version>${project.parent.version}</version> 44 </dependency> 45 <dependency> 46 <groupId>com.sharp</groupId> 47 <artifactId>sharp-common</artifactId> 48 <version>${project.parent.version}</version> 49 </dependency> 50 <dependency> 51 <groupId>com.sharp</groupId> 52 <artifactId>sharp-mapper</artifactId> 53 <version>${project.parent.version}</version> 54 </dependency> 55 <dependency> 56 <groupId>com.sharp</groupId> 57 <artifactId>sharp-service-api</artifactId> 58 <version>${project.parent.version}</version> 59 </dependency> 60 <dependency> 61 <groupId>org.mybatis.spring.boot</groupId> 62 <artifactId>mybatis-spring-boot-starter</artifactId> 63 </dependency> 64 <dependency> 65 <groupId>mysql</groupId> 66 <artifactId>mysql-connector-java</artifactId> 67 </dependency> 68 69 <dependency> 70 <groupId>org.springframework.boot</groupId> 71 <artifactId>spring-boot-starter-test</artifactId> 72 <scope>test</scope> 73 </dependency> 74 </dependencies> 75 76 <!-- <build> 77 <plugins> 78 <plugin> 79 <groupId>org.springframework.boot</groupId> 80 <artifactId>spring-boot-maven-plugin</artifactId> 81 </plugin> 82 </plugins> 83 </build> --> 84 85 86 </project>
web user pom
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <artifactId>sharp-user</artifactId> 7 <packaging>jar</packaging> 8 9 <name>sharp-user</name> 10 <description>Demo project for Spring Boot</description> 11 12 <parent> 13 <groupId>com.sharp</groupId> 14 <artifactId>sharp-pom</artifactId> 15 <version>0.0.1-SNAPSHOT</version> 16 </parent> 17 18 <properties> 19 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 20 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 21 <java.version>1.8</java.version> 22 </properties> 23 24 <dependencies> 25 <dependency> 26 <groupId>com.alibaba</groupId> 27 <artifactId>druid</artifactId> 28 </dependency> 29 <dependency> 30 <groupId>org.springframework.boot</groupId> 31 <artifactId>spring-boot-starter-web</artifactId> 32 </dependency> 33 <dependency> 34 <groupId>com.sharp</groupId> 35 <artifactId>sharp-entity</artifactId> 36 <version>0.0.1-SNAPSHOT</version> 37 </dependency> 38 <dependency> 39 <groupId>com.sharp</groupId> 40 <artifactId>sharp-common</artifactId> 41 <version>0.0.1-SNAPSHOT</version> 42 </dependency> 43 <dependency> 44 <groupId>com.sharp</groupId> 45 <artifactId>sharp-service-api</artifactId> 46 <version>0.0.1-SNAPSHOT</version> 47 </dependency> 48 <!-- 微服务项目使不需要以下实现类的配置,只需要配置好dubbo即可 --> 49 <dependency> 50 <groupId>com.sharp</groupId> 51 <artifactId>sharp-service</artifactId> 52 <version>0.0.1-SNAPSHOT</version> 53 </dependency> 54 <dependency> 55 <groupId>com.sharp</groupId> 56 <artifactId>sharp-mapper</artifactId> 57 <version>0.0.1-SNAPSHOT</version> 58 </dependency> 59 <dependency> 60 <groupId>org.springframework.boot</groupId> 61 <artifactId>spring-boot-starter-test</artifactId> 62 <scope>test</scope> 63 </dependency> 64 </dependencies> 65 66 <build> 67 <plugins> 68 <plugin> 69 <groupId>org.springframework.boot</groupId> 70 <artifactId>spring-boot-maven-plugin</artifactId> 71 </plugin> 72 </plugins> 73 </build> 74 75 76 </project>
application.properties
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 spring.profiles.active=local 2 3 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 4 spring.datasource.driver-class-name=com.mysql.jdbc.Driver 5 spring.datasource.url=jdbc:mysql://192.168.xxx.xxx:3306/sharp 6 spring.datasource.username=root 7 spring.datasource.password=******** 8 9 #mybatis配置 10 #指定全局配置文件位置 11 mybatis.config-location=classpath:mybatis/mybatis-config.xml 12 #指定别名包 13 mybatis.type-aliases-package=com.sharp.forward.entity 14 #指定xml文件位置 15 mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
注意启动项上一定要加注解@MapperScan("com.sharp.forward.mapper"),其他都是常规的东西,结构如下:
测试OK!