前言
個人從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