1. 程式人生 > >springboot的maven多模組專案架構微服務搭建--跳過springmvc單一專案直接構建多模組並衍化為微服務專案

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"
> 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>
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 <?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/*.xml
View Code

注意啟動項上一定要加註解@MapperScan("com.sharp.forward.mapper"),其他都是常規的東西,結構如下:

 測試OK!