总想对微服务架构做一个小小的总结,不知如何下手,最近觉得还是从搭建微服务的过程来入手,对于springboot的maven项目从构建多模块架构进而衍化为常用的微服务架构来做个记录吧。
首先,创建多个springboot项目,项目结构如图:
裁剪后如右侧

创建完成后,先解释一下:sharp-pom是父类工程,其他所有工程都要继承该工程,sharp-pom主要用来管理版本和声明一些jar的引用,本博主没有做聚合工程,这里说明一下聚合和继承的关系:继承是父POM为了抽取统一的配置信息和依赖版本控制,方便子POM直接引用,简化子POM的配置。聚合(多模块)则是为了方便一组项目进行统一的操作而作为一个大的整体,所以要真正根据这两者不同的作用来使用,不必为了聚合而继承同一个父POM,也不比为了继承父POM而设计成多模块。
接下来对各个模块进行处理
sharp-pom 只需要保留pom.xml文件即可,注意打包方式一定选择pom,具体内容如下:

1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 4 <modelVersion>4.0.0</modelVersion> 5 5 6 6 <groupId>com.sharp</groupId> 7 7 <artifactId>sharp-pom</artifactId> 8 8 <version>0.0.1-SNAPSHOT</version> 9 9 <packaging>pom</packaging> 1010 1111 <name>sharp-pom</name> 1212 <description>Demo project for Spring Boot</description> 1313 1414 <parent> 1515 <groupId>org.springframework.boot</groupId> 1616 <artifactId>spring-boot-starter-parent</artifactId> 1717 <version>2.1.0.RELEASE</version> 1818 <relativePath/> 1919 </parent> 2020 2121 <properties> 2222 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 2323 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 2424 <project.version>0.0.1-SNAPSHOT</project.version> 2525 <java.version>1.8</java.version> 2626 <mysql.version>8.0.12</mysql.version> 2727 <mybatis.spring.version>1.3.2</mybatis.spring.version> 2828 <jdbc.version>5.1.1.RELEASE</jdbc.version> 2929 <druid.version>1.1.10</druid.version> 3030 <skipTests>true</skipTests> 3131 </properties> 3232 <!-- dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)dependencyManagement里只是声明依赖,并不实现引入, 3333 因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会 3434 从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。 --> 3535 <!-- 这里只是声明,子项目中用到时候应用不需要再次引入版本号,统一在此管理了版本 --> 3636 <dependencyManagement> 3737 <dependencies> 3838 <dependency> 3939 <groupId>com.alibaba</groupId> 4040 <artifactId>druid</artifactId> 4141 <version>${druid.version}</version> 4242 </dependency> 4343 <dependency> 4444 <groupId>org.springframework</groupId> 4545 <artifactId>spring-jdbc</artifactId> 4646 <version>${jdbc.version}</version> 4747 </dependency> 4848 <dependency> 4949 <groupId>mysql</groupId> 5050 <artifactId>mysql-connector-java</artifactId> 5151 <version>${mysql.version}</version> 5252 </dependency> 5353 <dependency> 5454 <groupId>org.mybatis.spring.boot</groupId> 5555 <artifactId>mybatis-spring-boot-starter</artifactId> 5656 <version>${mybatis.spring.version}</version> 5757 </dependency> 5858 </dependencies> 5959 <!-- 私服配置,子项目继承后不需要在子项目中配置 --> 6060 </dependencyManagement> 6161 <distributionManagement> 6262 <repository> 6363 <id>my-release</id> 6464 <url>http://192.168.135.128:8081/repository/maven-releases/</url> 6565 </repository> 6666 <snapshotRepository> 6767 <id>my-snapshots</id> 6868 <url>http://192.168.135.128:8081/repository/maven-snapshots/</url> 6969 </snapshotRepository> 7070 </distributionManagement> 7171 </project>
View Code
接下来的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暂时无其他内容

1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 4 <modelVersion>4.0.0</modelVersion> 5 5 6 6 <parent> 7 7 <groupId>com.sharp</groupId> 8 8 <artifactId>sharp-pom</artifactId> 9 9 <version>0.0.1-SNAPSHOT</version> 1010 </parent> 1111 <artifactId>sharp-common</artifactId> 1212 <packaging>jar</packaging> 1313 1414 <name>sharp-common</name> 1515 <description>公共模块</description> 1616 1717 1818 <dependencies> 1919 <dependency> 2020 <groupId>org.springframework.boot</groupId> 2121 <artifactId>spring-boot-starter</artifactId> 2222 </dependency> 2323 2424 <dependency> 2525 <groupId>org.springframework.boot</groupId> 2626 <artifactId>spring-boot-starter-test</artifactId> 2727 <scope>test</scope> 2828 </dependency> 2929 </dependencies> 3030 <!-- <build> 3131 <plugins> 3232 <plugin> 3333 <groupId>org.springframework.boot</groupId> 3434 <artifactId>spring-boot-maven-plugin</artifactId> 3535 </plugin> 3636 <plugin> 3737 <groupId>org.apache.maven.plugins</groupId> 3838 <artifactId>maven-surefire-plugin</artifactId> 3939 <version>2.6</version> 4040 <configuration> 4141 <skipTests>true</skipTests> 4242 </configuration> 4343 </plugin> 4444 </plugins> 4545 </build> --> 4646 </project>
View Code
entity pom

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-entity</artifactId> 12 <packaging>jar</packaging> 13 14 <name>sharp-entity</name> 15 <description>Demo project for Spring Boot</description> 16 17 <dependencies> 18 <dependency> 19 <groupId>org.springframework.boot</groupId> 20 <artifactId>spring-boot-starter</artifactId> 21 </dependency> 22 23 <dependency> 24 <groupId>org.springframework.boot</groupId> 25 <artifactId>spring-boot-starter-test</artifactId> 26 <scope>test</scope> 27 </dependency> 28 <dependency> 29 <groupId>com.sharp</groupId> 30 <artifactId>sharp-common</artifactId> 31 <version>${project.parent.version}</version> 32 </dependency> 33 </dependencies> 34 35 <!-- <build> 36 <plugins> 37 <plugin> 38 <groupId>org.springframework.boot</groupId> 39 <artifactId>spring-boot-maven-plugin</artifactId> 40 <executions> 41 <execution> 42 <goals> 43 <goal>repackage</goal> 44 </goals> 45 </execution> 46 </executions> 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>
View Code
mapper项目无特别之处

pom

1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 4 <modelVersion>4.0.0</modelVersion> 5 5 <parent> 6 6 <groupId>com.sharp</groupId> 7 7 <artifactId>sharp-pom</artifactId> 8 8 <version>0.0.1-SNAPSHOT</version> 9 9 </parent> 1010 <artifactId>sharp-mapper</artifactId> 1111 <packaging>jar</packaging> 1212 1313 <name>sharp-mapper</name> 1414 <description>Demo project for Spring Boot</description> 1515 1616 <dependencies> 1717 <dependency> 1818 <groupId>com.sharp</groupId> 1919 <artifactId>sharp-common</artifactId> 2020 <version>${project.parent.version}</version> 2121 </dependency> 2222 <dependency> 2323 <groupId>com.sharp</groupId> 2424 <artifactId>sharp-entity</artifactId> 2525 <version>${project.parent.version}</version> 2626 </dependency> 2727 <dependency> 2828 <groupId>org.springframework.boot</groupId> 2929 <artifactId>spring-boot-starter</artifactId> 3030 </dependency> 3131 <dependency> 3232 <groupId>org.mybatis.spring.boot</groupId> 3333 <artifactId>mybatis-spring-boot-starter</artifactId> 3434 </dependency> 3535 <dependency> 3636 <groupId>org.springframework.boot</groupId> 3737 <artifactId>spring-boot-starter-test</artifactId> 3838 <scope>test</scope> 3939 </dependency> 4040 </dependencies> 4141 4242 <!-- <build> 4343 <plugins> 4444 <plugin> 4545 <groupId>org.springframework.boot</groupId> 4646 <artifactId>spring-boot-maven-plugin</artifactId> 4747 </plugin> 4848 <plugin> 4949 <groupId>org.apache.maven.plugins</groupId> 5050 <artifactId>maven-surefire-plugin</artifactId> 5151 <version>2.6</version> 5252 <configuration> 5353 <skipTests>true</skipTests> 5454 </configuration> 5555 </plugin> 5656 </plugins> 5757 </build> 5858 --> 5959 6060 </project>
View Code
service-api pom

1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 4 <modelVersion>4.0.0</modelVersion> 5 5 6 6 <artifactId>sharp-service-api</artifactId> 7 7 <packaging>jar</packaging> 8 8 9 9 <name>sharp-service-api</name> 1010 <description>Demo project for Spring Boot</description> 1111 1212 <parent> 1313 <groupId>com.sharp</groupId> 1414 <artifactId>sharp-pom</artifactId> 1515 <version>0.0.1-SNAPSHOT</version> 1616 </parent> 1717 1818 <properties> 1919 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 2020 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 2121 <java.version>1.8</java.version> 2222 </properties> 2323 2424 <dependencies> 2525 <dependency> 2626 <groupId>org.springframework.boot</groupId> 2727 <artifactId>spring-boot-starter</artifactId> 2828 </dependency> 2929 <dependency> 3030 <groupId>com.sharp</groupId> 3131 <artifactId>sharp-entity</artifactId> 3232 <version>${project.parent.version}</version> 3333 </dependency> 3434 <dependency> 3535 <groupId>org.springframework.boot</groupId> 3636 <artifactId>spring-boot-starter-test</artifactId> 3737 <scope>test</scope> 3838 </dependency> 3939 </dependencies> 4040 4141 4242 </project>
View Code
service pom

1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 4 <modelVersion>4.0.0</modelVersion> 5 5 <parent> 6 6 <groupId>com.sharp</groupId> 7 7 <artifactId>sharp-pom</artifactId> 8 8 <version>0.0.1-SNAPSHOT</version> 9 9 </parent> 1010 <artifactId>sharp-service</artifactId> 1111 <packaging>jar</packaging> 1212 1313 <name>sharp-sevice</name> 1414 <description>Demo project for Spring Boot</description> 1515 <dependencies> 1616 <!-- <dependency> 1717 <groupId>org.springframework.boot</groupId> 1818 <artifactId>spring-boot-starter-amqp</artifactId> 1919 </dependency> 2020 <dependency> 2121 <groupId>org.springframework.boot</groupId> 2222 <artifactId>spring-boot-starter-data-mongodb</artifactId> 2323 </dependency> 2424 <dependency> 2525 <groupId>org.springframework.boot</groupId> 2626 <artifactId>spring-boot-starter-data-redis</artifactId> 2727 </dependency> --> 2828 <dependency> 2929 <groupId>org.springframework.boot</groupId> 3030 <artifactId>spring-boot-starter-web</artifactId> 3131 </dependency> 3232 <dependency> 3333 <groupId>com.alibaba</groupId> 3434 <artifactId>druid</artifactId> 3535 </dependency> 3636 <dependency> 3737 <groupId>org.springframework</groupId> 3838 <artifactId>spring-jdbc</artifactId> 3939 </dependency> 4040 <dependency> 4141 <groupId>com.sharp</groupId> 4242 <artifactId>sharp-entity</artifactId> 4343 <version>${project.parent.version}</version> 4444 </dependency> 4545 <dependency> 4646 <groupId>com.sharp</groupId> 4747 <artifactId>sharp-common</artifactId> 4848 <version>${project.parent.version}</version> 4949 </dependency> 5050 <dependency> 5151 <groupId>com.sharp</groupId> 5252 <artifactId>sharp-mapper</artifactId> 5353 <version>${project.parent.version}</version> 5454 </dependency> 5555 <dependency> 5656 <groupId>com.sharp</groupId> 5757 <artifactId>sharp-service-api</artifactId> 5858 <version>${project.parent.version}</version> 5959 </dependency> 6060 <dependency> 6161 <groupId>org.mybatis.spring.boot</groupId> 6262 <artifactId>mybatis-spring-boot-starter</artifactId> 6363 </dependency> 6464 <dependency> 6565 <groupId>mysql</groupId> 6666 <artifactId>mysql-connector-java</artifactId> 6767 </dependency> 6868 6969 <dependency> 7070 <groupId>org.springframework.boot</groupId> 7171 <artifactId>spring-boot-starter-test</artifactId> 7272 <scope>test</scope> 7373 </dependency> 7474 </dependencies> 7575 7676 <!-- <build> 7777 <plugins> 7878 <plugin> 7979 <groupId>org.springframework.boot</groupId> 8080 <artifactId>spring-boot-maven-plugin</artifactId> 8181 </plugin> 8282 </plugins> 8383 </build> --> 8484 8585 8686 </project>
View Code
web user pom

1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 4 <modelVersion>4.0.0</modelVersion> 5 5 6 6 <artifactId>sharp-user</artifactId> 7 7 <packaging>jar</packaging> 8 8 9 9 <name>sharp-user</name> 1010 <description>Demo project for Spring Boot</description> 1111 1212 <parent> 1313 <groupId>com.sharp</groupId> 1414 <artifactId>sharp-pom</artifactId> 1515 <version>0.0.1-SNAPSHOT</version> 1616 </parent> 1717 1818 <properties> 1919 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 2020 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 2121 <java.version>1.8</java.version> 2222 </properties> 2323 2424 <dependencies> 2525 <dependency> 2626 <groupId>com.alibaba</groupId> 2727 <artifactId>druid</artifactId> 2828 </dependency> 2929 <dependency> 3030 <groupId>org.springframework.boot</groupId> 3131 <artifactId>spring-boot-starter-web</artifactId> 3232 </dependency> 3333 <dependency> 3434 <groupId>com.sharp</groupId> 3535 <artifactId>sharp-entity</artifactId> 3636 <version>0.0.1-SNAPSHOT</version> 3737 </dependency> 3838 <dependency> 3939 <groupId>com.sharp</groupId> 4040 <artifactId>sharp-common</artifactId> 4141 <version>0.0.1-SNAPSHOT</version> 4242 </dependency> 4343 <dependency> 4444 <groupId>com.sharp</groupId> 4545 <artifactId>sharp-service-api</artifactId> 4646 <version>0.0.1-SNAPSHOT</version> 4747 </dependency> 4848 <!-- 微服务项目使不需要以下实现类的配置,只需要配置好dubbo即可 --> 4949 <dependency> 5050 <groupId>com.sharp</groupId> 5151 <artifactId>sharp-service</artifactId> 5252 <version>0.0.1-SNAPSHOT</version> 5353 </dependency> 5454 <dependency> 5555 <groupId>com.sharp</groupId> 5656 <artifactId>sharp-mapper</artifactId> 5757 <version>0.0.1-SNAPSHOT</version> 5858 </dependency> 5959 <dependency> 6060 <groupId>org.springframework.boot</groupId> 6161 <artifactId>spring-boot-starter-test</artifactId> 6262 <scope>test</scope> 6363 </dependency> 6464 </dependencies> 6565 6666 <build> 6767 <plugins> 6868 <plugin> 6969 <groupId>org.springframework.boot</groupId> 7070 <artifactId>spring-boot-maven-plugin</artifactId> 7171 </plugin> 7272 </plugins> 7373 </build> 7474 7575 7676 </project>
View Code
application.properties

1 1 spring.profiles.active=local 2 2 3 3 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 4 4 spring.datasource.driver-class-name=com.mysql.jdbc.Driver 5 5 spring.datasource.url=jdbc:mysql://192.168.xxx.xxx:3306/sharp 6 6 spring.datasource.username=root 7 7 spring.datasource.password=******** 8 8 9 9 #mybatis配置 1010 #指定全局配置文件位置 1111 mybatis.config-location=classpath:mybatis/mybatis-config.xml 1212 #指定别名包 1313 mybatis.type-aliases-package=com.sharp.forward.entity 1414 #指定xml文件位置 1515 mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
View Code
注意启动项上一定要加注解@MapperScan("com.sharp.forward.mapper"),其他都是常规的东西,结构如下:

测试OK!