spring cloud腳手架項目(二)模塊化項目搭建以及maven分環境打包部署

前言

個人從17年畢業,算上實習等等經歷,也是機緣巧合,對於從零開始搭建項目這件事情在每一家公司都經歷過了。到今天爲止,也算是有點心得。現在就講一下我從零開始搭建一個微服務應用的理解。
文章maven多環境參照:https://blog.csdn.net/jisu30miao1225/article/details/80745035
https://blog.csdn.net/u010277958/article/details/93243978

模塊化搭建

現在的應用項目,都是追求一個模塊化的概念,恰巧idea這個寫代碼工具的項目管理也是模塊化的,和現在的情況如出一轍,很利於項目的管理。我覺得也是lide流行的原因之一吧。
還有一個不得不提的就是maven的,他對於項目的構建非常重要,我在大學寫java項目的時候,還需要自己去網上把jar包下載下來,完全不知道maven,當時構建一個項目非常的痛苦,各種jar包依賴很折磨人,通過maven可以很方便的管理這些jar包,環境,以及最終的打包

項目分層

我把我的腳手架項目分爲5個模塊,如圖所示:
在這裏插入圖片描述
通過繼承關係來管理這幾個模塊
common:通用的工具類,配置類存放位置
dao:數據庫連接層,只有數據集pojo和mapper文件
core:邏輯層,用於執行各種需要的邏輯
service:接口層,只有接口和返回值,別的都沒有,用於微服務調用的jar包提供,所以在層級中可以看出是單獨在那裏的底層jar包之一,我在管理這一層的時候也是本着儘可能提供少的其他jar包而進行管理的,目前只有一個feign的jar
start:只有一個spring boot的start文件。用於項目啓動

文件配置

在這裏插入圖片描述
如圖所示,我們的項目由一個主pom管理所有的子pom文件,作爲一個jar包的管理和使用。

<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>

    <groupId>com.chen</groupId>
    <artifactId>SpringCloudScaffold</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>chen_common</module>
        <module>chen_dao</module>
        <module>chen_core</module>
        <module>chen_service</module>
        <module>chen_start</module>
    </modules>
    <!-- 常量定義 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <java.source.version>1.8</java.source.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
        <project-common.version>1.0.0-SNAPSHOT</project-common.version>
   </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--本地jar-->
            <dependency>
                <groupId>com.chen</groupId>
                <artifactId>chen_dao</artifactId>
                <version>${project-common.version}</version>
            </dependency>
            <dependency>
                <groupId>com.chen</groupId>
                <artifactId>chen_common</artifactId>
                <version>${project-common.version}</version>
            </dependency>
            <dependency>
                <groupId>com.chen</groupId>
                <artifactId>chen_core</artifactId>
                <version>${project-common.version}</version>
            </dependency>
            <dependency>
                <groupId>com.chen</groupId>
                <artifactId>chen_service</artifactId>
                <version>${project-common.version}</version>
            </dependency>
            <dependency>
                <groupId>com.chen</groupId>
                <artifactId>chen_start</artifactId>
                <version>${project-common.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

舉例2個一個子pom文件類型
common模塊:
是最高層依賴jar包

<?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">
    <parent>
        <artifactId>SpringCloudScaffold</artifactId>
        <groupId>com.chen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>chen_common</artifactId>
    <name>chen_common</name>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

start模塊:
也是最底層依賴jar,只有一個spring boot啓動類和各個環節的yml

<?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">
    <parent>
        <artifactId>SpringCloudScaffold</artifactId>
        <groupId>com.chen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>chen_start</artifactId>
    <name>chen_start</name>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>com.chen</groupId>
            <artifactId>chen_core</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <spring.profiles.active>dev</spring.profiles.active>
            </properties>
        </profile>
        <profile>
            <id>stg</id>
            <properties>
                <spring.profiles.active>stg</spring.profiles.active>
            </properties>
        </profile>
        <profile>
            <id>prd</id>
            <properties>
                <spring.profiles.active>prd</spring.profiles.active>
            </properties>
        </profile>
    </profiles>

</project>

yml

spring:
  profiles:
    active: @spring.profiles.active@

配置說明

1.可以看到@spring.profiles.active@這個在application.yml的配置文件其中的屬性和start模塊中maven中profiles的配置相互對應,每次maven進行install的時候回選擇其中的一個配置填入對應的配置信息,我們一般分爲本地,日常,預發,線上這樣4個環境,然後idea也會很人性化的給你對應的profiles環境進行切換。這也是我們進行jenkins打包的時候會配置的啓動命令,帶上對應的profiles參數配置即可
2.build配置就是用於maven clean和install使用的
3.每一個子pom都有一個parent直接繼承主pom,這樣你在主pom中導入的jar包也可以在子pom中使用,idea也有方便的可以進行跳轉,有利於jar包的調整
4.spring boot快速jar包引入可以通過主pom中的parent中連接到spring boot 2.0.3relese版本中對應的jar,這樣在導入其他spring組件的時候不需要關心其對應的jar包版本了

項目地址

github:https://github.com/alex9567/SpringCloudScaffold

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章