(一)SpringCloudConfig
微服务意味着要将单体应用中的业务拆分成一个个子服务
,
每个服务的粒度相对较小
,
因此系统中会出现大
量的服务。
由于每个服务都需要必要的配置信息才能运行
,
所以一套集中式的
,
动态的配置管理设施是必不可少的。
Spring Cloud
提供了
ConfigServer
来解决这个问题
.
Spring Cloud Config
为微服务架构中的微服务提供集中化的外部配置支持
,
配置服务器为各个不同微服
务应用的所有环境提供了一个中心化的外部配置。
SpringCloud Config
分为服务端和客户端两部分。
![](https://img-blog.csdnimg.cn/93db78c5c7e943a0bde88fc94439d9a6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5ZGo5pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
服务端也称为分布式配置中心
,
他是一个独立的微服务应用
,
用来连接配置服务器并为客户端提供获取配置
信息
,
加密
/
解密 信息等访问接口。
客户端则是通过制定的配置中心来管理应用资源
,
以及与业务相关的配置内容
,
并在启动的时候从配置中心
获取和加载配置信息配置服务器默认采用
git
来存储配置信息
,
这样就有助于对环境配置进行版本管理
,
并
且可以通过
git
客户端工具来方便的管理和访问配置内容。
![](https://img-blog.csdnimg.cn/e260751c444d4e22af55ee87aa1b9a19.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5ZGo5pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
一个使用微服务架构的应用系统可能会包括成百上千个微服务
,
配置各部相同
,
需求各不相同:
不同环境不同配置:例如数据源在不同的环境(开发
,
测试
,
生产)是不同的
,
可以通过配置中心
运行期间可以动态调整。例如根据各个微服务的负载状况
,
动态调整数据源连接池大小或者熔断阀
值
,
并且调整时不停止微服务(配置修改后可以自动更新)
![](https://img-blog.csdnimg.cn/ecaa041ee70541aea31734c0dc72cb99.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5ZGo5pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
(二)将生产者打包成jar包
1.先把生产者打包成jar包,先点击clean清空,再点击install打包
2.打包完成之后架包会出现你项目的targe的目录下
3.把架包复制到桌面上,按住shift快捷键,右击空白桌面,出现在此处打开powershell窗口
4.在窗口输入java -jar 架包名称 点击回车 启动运行
访问生产者界面
(三)新建客户端模块
1.新建一个SpringBoot项目,作为客户端
2.在Nacos中配置一个客户端服务
3 .在父类模块中引入nacos-config和bookStrap依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--bootstrap依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
4.创建application.yml文件和bootstrap.yml文件
注:文件名不可乱写,必须是application和bootstrap
bootstrap.yml配置
server:
#项目端口号(boostrap.yml中配置后,可在application.yml中不配置)
port: 8083
#spring:
# application:
# # 应用名对应nacos配置中心的Data Id
# name: nacos-config-client
# cloud:
# nacos:
# #指定nacos注册中心地址(boostrap.yml中配置后,可在application.yml中不配置)
# discovery:
# server-addr: 127.0.0.1:8848
# config:
# #不填写默认就是项目的应用名
# prefix: ${spring.application.name}
# #指定nacos配置中心地址
# server-addr: 127.0.0.1:8848
# #指定配置文件后缀名
# file-extension: yml
# #这里需要注意namespace的配置不是使用名称,而是使用Namespace的ID。
# #namespace: 3a74eaaa-031c-4cae-9441-3c159febeb79
# #要导入的其它配置文件的data-id,多个之间使用逗号分隔
# shared-dataids: redis-config.yml
# refreshable-dataids: redis-config.yml
spring:
application:
# 会自动根据服务名拉取data-id对应的配置文件.如果data-id跟服务名不一致 就需要手动指定data-id
# 跟服务名相同的data-id的配置文件,称之为默认的配置文件
# 除了默认的配置文件,其他配置文件必须写上后缀
name: config-client
cloud:
nacos:
discovery: #注册中心
server-addr: 127.0.0.1:8848
# username: nacos
# password: nacos
config: #配置中心
prefix: ${spring.application.name}
#指定nacos配置中心地址
server-addr: 127.0.0.1:8848
file-extension: yml # 使用的 nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties
namespace: 3a74eaaa-031c-4cae-9441-3c159febeb79 # 使用的 nacos 的命名空间,默认为 null
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
# 共享配置集数组
shared-configs:
- data-id: redis-config.yml
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
refresh: true # 是否自动刷新配置,默认为 false
5.Controller注入
package com.yk.configclient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SuppressWarnings("all")
@RefreshScope
public class TestController {
@Value("${email.host}")
private String host;
@Value("${email.username}")
private String username;
@Value("${email.password}")
private String password;
@Autowired
private ConfigClientApplication.EmailProperties properties;
@Value("${redis.host}")
private String redisHost;
@Value("${redis.port}")
private String redisPort;
@RequestMapping("/test01")
public String test01(){
StringBuffer sb = new StringBuffer();
sb.append("<b>host<b>:"+host);
sb.append("<b>username<b>:"+username);
sb.append("<b>password<b>:"+password);
sb.append("<b>properties<b>:"+properties);
sb.append("<b>host<b>:"+redisHost);
sb.append("<b>port<b>:"+redisPort);
return sb.toString();
}
}
6.在客户端启动类中添加@EnableDiscoveryClient注解
并写一个方法,在Controller注入这个方法
package com.yk.configclient;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Configuration;
@SpringBootApplication
@EnableDiscoveryClient
@SuppressWarnings("all")
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
@Configuration
@Data
@ConfigurationProperties(prefix = "email")
public class EmailProperties{
private String host;
private String username;
private String password;
}
}
(四)远程配置读取
1.在nacos中加一个配置
2.在bootstarp.yml配置中配置读取路径
3.在controller中注入属性
4.配置两个不同命名空间分支
5.在配置列表中将两个配置克隆给dev和test分支,并编辑把TEXT配置格式改成YML配置格式
6.把命名空间ID复制到namespace上,它环境就会改成相应的配置环境
注:运行结果
(五)共享配置+环境
1.把config-client打包成jar包
2.运行这个jar,粘贴后面这行语句上去运行
java -jar xx.jar --spring.cloud.nacos.config.namespace=命名空间ID