springboot的maven多模組專案架構微服務搭建--跳過springmvc單一專案直接構建多模組並衍化為微服務專案
總想對微服務架構做一個小小的總結,不知如何下手,最近覺得還是從搭建微服務的過程來入手,對於springboot的maven專案從構建多模組架構進而衍化為常用的微服務架構來做個記錄吧。
首先,建立多個springboot專案,專案結構如圖:
裁剪後如右側
建立完成後,先解釋一下:sharp-pom是父類工程,其他所有工程都要繼承該工程,sharp-pom主要用來管理版本和宣告一些jar的引用,本博主沒有做聚合工程,這裡說明一下聚合和繼承的關係:繼承是父POM為了抽取統一的配置資訊和依賴版本控制,方便子POM直接引用,簡化子POM的配置。聚合(多模組)則是為了方便一組專案進行統一的操作而作為一個大的整體,所以要真正根據這兩者不同的作用來使用,不必為了聚合而繼承同一個父POM,也不比為了繼承父POM而設計成多模組。
接下來對各個模組進行處理
sharp-pom 只需要保留pom.xml檔案即可,注意打包方式一定選擇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"View Code> 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暫時無其他內容
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>View Code
entity pom
<?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>View Code
mapper專案無特別之處
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 <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>View Code
service-api 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 <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>View Code
service 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 <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>View Code
web user 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 <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>View Code
application.properties
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/*.xmlView Code
注意啟動項上一定要加註解@MapperScan("com.sharp.forward.mapper"),其他都是常規的東西,結構如下:
測試OK!