摘要
对于小项目而言,SpringBoot够用了,完全没必要上SpringCloud+Nacos,因为实在太重了,部署、配置均麻烦的一批。但是一些应用场景下,比如开发者想脱身的时候,使用这套技术栈,就可以做到完全甩锅给运维!
正文
先说下版本对应关系,官方文档里倒是提到了springboot、springcloud、springcloudalibaba之间的对应关系,但是文档存在更新不及时问题。因此,版本对应关系,可以直接使用提供的脚手架。
脚手架生成服务
脚手架生成配置截图
一、SpringCloudGateway
创建一个空Maven项目,pom.xml中添加如下内容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| <properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<!-- 异步网关。对应的还有基于Servlet-API的同步网关spring-cloud-starter-gateway-mvc -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
|
配置示例application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| server:
port: 80
spring:
cloud:
gateway:
# spring-cloud-gateway:https://docs.spring.io/spring-cloud-gateway/docs/
# predicate 文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories
# filter 文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
routes:
- id: test
# 用户访问http://127.0.0.1:80/data/a/b/c 实际代理地址http://127.0.0.1:8080/api/a/b/c
predicates:
- Path=/data/**
filters:
- StripPrefix=1
# 使用 (?<segment>.*) 是为了捕获路径部分,后续用 ${segment} 进行替换。
# 也可以不叫segment
- RewritePath=/(?<segment>.*), /api/${segment}
uri: http://127.0.0.1:8080
- id: name
# 用户访问http://127.0.0.1:80/ta/tb/tc 实际代理地址http://127.0.0.1:8080/root/ta/tb/tc
predicates:
- Path=/**
filters:
- RewritePath=/(?<segment>.*), /root/${segment}
uri: http://127.0.0.1:8080
|
参考文档
直接上源码
二、Nacos配置管理与服务发现
2.1 Nacos编译与使用
了解Nacos可以直接阅读官方文档
使用Nacos,我们需要有Nacos-Server,此处就不使用官方提供的release版本了,而是自己编译,因为本来就是Java开发的,所以对于Javaer来说也没啥难度!
1
2
3
4
| git clone https://github.com/alibaba/nacos.git
cd nacos
git checkout 2.2.4
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
|
只需要四行命令,即可实现编译,要求编译时有网络环境。
之后,进入到distribution/target,即可获取压缩包。
解压后,进入bin目录,执行命令启动nacos服务即可
1
| startup.cmd -m standalone
|
2.2 实现动态数据源切换
创建项目时,需要添加配置管理依赖和服务发现依赖。
“Talk is cheap. Show me the code.”,直接上源码
核心在于@RefreshScope这个注解,被该注解标识后,表示这个Bean在运行时是可刷新的。并且所有基于该Bean的依赖也会被刷新,这些复杂的工作都是springcloud做的,开发者不需要关心。
整体流程如图所示
至于Nacos如何配置,参照Nacos 融合 Spring Cloud,成为注册配置中心 | Nacos
展示一下最后的成果。
参考