如果需要學(xué)習(xí)更多SpringCloud Alibaba的集成使用
這個項(xiàng)目可以幫助你快速的啟動一個基于SpringCloud Alibaba技術(shù)棧的微服務(wù)框架搭建
基于SpringCloud Gateway的網(wǎng)關(guān)系統(tǒng),包括:認(rèn)證、鑒權(quán)、路由、負(fù)載均衡、流控等
基于AntDesignPro的登錄,包括用戶名密碼登錄、短信驗(yàn)證碼登錄,實(shí)現(xiàn)了圖形驗(yàn)證碼防刷功能
Nacos負(fù)責(zé)服務(wù)注冊、配置管理
Sentinel負(fù)責(zé)流量控制、熔斷降級、系統(tǒng)負(fù)載等多個維度保護(hù)服務(wù)的穩(wěn)定性
Seata負(fù)責(zé)分布式事務(wù)管理
前端使用了AntDesignPro框架,參考這個項(xiàng)目,你可以快速的開啟集成開發(fā)
基于 SpringBoot3 項(xiàng)目更容易集成到多個平臺(K8S、Istio)
演示了如何通過starter擴(kuò)展功能(Doc、Route)
演示了如何統(tǒng)一控制接口規(guī)范
演示了如何規(guī)范異常處理
演示了如何規(guī)范使用Mybaits、Mybatis-Plus、分頁
演示了單元測試、mock測試、測試數(shù)據(jù)回滾,包括對controller、service的測試
項(xiàng)目分包明確,規(guī)范微服務(wù)的開發(fā)模式,使包與包之間的分工清晰
鏈路追蹤
ES日志管理
請參考:SpringCloud Alibaba Micro Service System
本文為了簡單易學(xué),只演示如下功能:
- 使用
Nacos進(jìn)行配置管理 - 使用
Nacos進(jìn)行服務(wù)注冊
本文源碼
https://gitee.com/bestaone/study/tree/master/springboot3-nacos
環(huán)境依賴
- JDK 17+
- Nacos 2.2.0+
- SpringBoot 3
- SpringCloud 2022.0.0
- SpringCloud Alibaba 2022.0.0.0-RC1
安裝 Nacos
安裝包安裝運(yùn)行
# 下載安裝包
>wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
# 解壓
>tar -zxvf nacos-server-2.2.0.tar.gz -C /usr/local/
# 配置文件在 conf/application.properties
>cd /usr/local/nacos
# 啟動
>./bin/startup.sh -m standalone
Docker安裝運(yùn)行
>docker run -d \
-e MODE=standalone \
-e JVM_XMS=256m -e JVM_XMX=256m \
-e PREFER_HOST_MODE=hostname \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--privileged=true \
--restart=always \
--name nacos-2.2.0 \
nacos/nacos-server:v2.2.0
Docker+MySQL安裝運(yùn)行
- 在
MySQL數(shù)據(jù)庫中創(chuàng)建nacos庫,并執(zhí)行如下腳本
springboot3-nacos/nacos-2.0.0-mysql-schema.sql
- 執(zhí)行啟動腳本
>docker run -d \
-e MODE=standalone \
-e JVM_XMS=256m -e JVM_XMX=256m \
-e PREFER_HOST_MODE=hostname \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=127.0.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--privileged=true \
--restart=always \
--name nacos-2.2.0 \
nacos/nacos-server:v2.2.0
驗(yàn)證
-
Nacos控制臺:http://127.0.0.1:8848/nacos 賬密:nacos/nacos
項(xiàng)目代碼
創(chuàng)建一個基礎(chǔ)的SpringBoot項(xiàng)目
- pom.xm
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bestaone.study</groupId>
<artifactId>springboot3-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot3-demo</name>
<description>demo</description>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.build-image.imageName>springboot3demo</spring-boot.build-image.imageName>
</properties>
<dependencyManagement>
<dependencies>
<!-- SpringCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringBoot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloudAlibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0-RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 使用bootstrap.yml必須依賴此類 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 啟動類
Starter
@SpringBootApplication
public class Starter {
public static void main(String[] args) {
SpringApplication.run(Starter.class, args);
}
}
HomeController
@RestController
public class HomeController {
@Value(value = "${test.name:LiSi}")
private String name;
@RequestMapping("/")
String home() {
return "Hello " + name;
}
}
- 配置文件
bootstrap.yml
spring.application.name: springboot3-nacos
test.name: WangWu
啟動項(xiàng)目驗(yàn)證
>curl --location --request GET 'http://127.0.0.1:8080'
Hello WangWu
添加集成Nacos所需的依賴
<!--注冊中心客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
調(diào)整代碼,只需在啟動類上添加注解@EnableDiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
public class Starter {
public static void main(String[] args) {
SpringApplication.run(Starter.class, args);
}
}
調(diào)整配置文件bootstrap.yml
spring.application.name: springboot3-nacos
test.name: WangWu
spring.cloud.nacos.config:
# 換成自己nacos服務(wù)器地址
server-addr: nacos-server:8848
file-extension: yml
shared-configs:
- application-common.yml
- application-redis.yml
namespace: sams
spring.cloud.nacos.discovery:
server-addr: nacos-server:8848
namespace: sams
添加Nacos配置
- 在
Nacos的namespace中添加sams - 在
namespacesams下創(chuàng)建配置文件application-common.yml,并添加配置
test.name: ZhangSan
測試驗(yàn)證
- 測試接口
>curl --location --request GET 'http://127.0.0.1:8080'
Hello ZhangSan
# 此配置已經(jīng)能夠從Nacos中獲取了
- 查看
Nacos服務(wù)列表

Nacos服務(wù)列表