前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
前言
Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從而減少了各模塊的開發成本。也可以說Spring Cloud 提供了構建分散式系統所需的“全家桶”。
SpringCloud的優缺點:
優點:
-
簡化開發: 提供了豐富的組件和模式,可以快速開發分散式系統。
-
微服務支持: 支持微服務架構,提供了服務註冊與發現、負載均衡等功能。
-
分散式配置管理: 提供了分散式配置管理的能力,可以動態管理配置信息。
-
監控與管理: 提供了監控、管理和調優的工具,方便運維管理和故障排查。
-
生態系統: 有龐大的社區支持和活躍的開發,生態系統完善。
缺點:
配置繁多且複雜,體量越大,部署治理成本越高,不利於維護,對團隊挑戰大
版本相容性:需要註意 Spring Cloud 各個組件的版本相容性,不同版本之間可能存在不相容的情況。
確定使用SpringCloud-alibaba的版本,這裡選擇(2021.0.4.0)
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本說明 從上邊網頁中找到 Springcloud-alibaba 2021.0.4.0 所對應的版本 ,如下圖: 這裡使用的JDK 為 11.0.18 Spring Cloud Version 對應的版本為 Spring Cloud 2021.0.4 Spring Boot Version 對應的版本為 2.6.11
3.選好版本,開始搭建SpringCloud項目
最好的練習就是動手實踐,接下來我們要創建一個父工程,管理下邊的不同服務(不同業務放到不同的服務中去,各個服務相互調用)。全程使用Maven進行搭建。
一. 構建父工程
構建父工程, 點擊 File -> New -> Project
選擇創建Maven項目,選擇JDK ,點擊Next
填寫 Name、 GroupId、ArtifactId、Version ,填寫完成,點擊Finish
項目的父工程已經建好了,根據我們前邊選擇的版本依賴配置父工程pom.xml
父工程不需要寫業務代碼,可以刪除src文件目錄和沒用的文件。
<?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> <groupId>com.waves</groupId> <artifactId>wavesservice</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-boot.version>2.6.11</spring-boot.version> <spring-cloud.version>2021.0.4</spring-cloud.version> <spring-dloud-alibaba.version>2021.0.4.0</spring-dloud-alibaba.version> <lombok.version>1.18.10</lombok.version> <log4j.version>1.2.17</log4j.version> <mysql.version>8.0.29</mysql.version> <druid.version>1.2.11</druid.version> <mybatisPlus.spring.boot.version>3.5.3</mybatisPlus.spring.boot.version> <amqp.version>2.3.9.RELEASE</amqp.version> <junit.version>4.12</junit.version> <test-version>2.3.9.RELEASE</test-version> <jackson-version>2.11.4</jackson-version> <aop.version>2.4.5</aop.version> <commons-collections.version>3.2.2</commons-collections.version> <fastjson.version>2.0.12</fastjson.version> <pagehelper.boot.version>1.4.3</pagehelper.boot.version> <lombok.version>1.18.24</lombok.version> <hutool.core.version>5.8.20</hutool.core.version> <hutool.all.version>5.8.20</hutool.all.version> <bootstrap.version>3.0.1</bootstrap.version> </properties> <!-- 因為是總項目,所以用dependencyManagement來管理,子項目不用管理版本了,可以直接引用 子模塊繼承之後,提供作用:鎖定版本+子module不用寫groupId和version --> <dependencyManagement> <dependencies> <!-- SpringCloud 依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringBoot 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringCloud-Alibaba 依賴 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-dloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> <scope>runtime</scope> </dependency> <!-- druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!-- MybatisPlus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatisPlus.spring.boot.version}</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!--單元測試--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>${test-version}</version> </dependency> <!-- Collection 增強Java集合框架 --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>${commons-collections.version}</version> </dependency> <!-- JSON 解析器和生成器 --> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>${fastjson.version}</version> </dependency> <!-- pagehelper 分頁插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper.boot.version}</version> </dependency> <!-- Spring boot aop 攔截器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>${aop.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-core --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core</artifactId> <version>${hutool.core.version}</version> </dependency> <!-- hutool 工具 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>${hutool.all.version}</version> </dependency> <!--bootstrap 啟動器載入上下文--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>${bootstrap.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <release>11</release> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>public</id> <name>aliyun nexus</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <name>aliyun nexus</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>
完成上述步驟,我們的父工程就已經搭建完成了。接下來就可以繼續搭建其他的微服務工程了。首先搭建一個公共模塊,為其他服務提供公共服務。
選中父工程,右鍵點擊 New -> Module
六. 選擇Maven ,JDK
這裡與構建父工程一致,選擇Maven,選擇自己本機安裝的JDK ,點擊Next
七. 填寫模塊服務名稱
填寫子模塊服務名稱, 點擊Finish 。
到這裡我們就創建好一個common父服務了。
八. 新建 cloud-common-core模塊
在common下邊新建
和上述創建模塊一樣 New -> Module
選擇Maven ,JDK
填寫模塊名稱,父模塊為cloud-common
將父工程(
)聲明的依賴添加到cloud-common-core的pom.xml中<?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>cloud-common</artifactId> <groupId>com.waves</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-common-core</artifactId> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties>