微服务意味着要将单体应用中的业务拆分成一个个子服务
,
每个服务的粒度相对较小
,因此系统中会出现大量的服务。
由于每个服务都需要必要的配置信息才能运行
,
所以一套集中式的
,
动态的配置管理设施是必不可少的。
Spring Cloud
提供了
ConfigServer
来解决这个问题
.
Spring Cloud Config
为微服务架构中的微服务提供集中化的外部配置支持
,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
SpringCloud Config
分为服务端和客户端两部分。
服务端也称为分布式配置中心
,
他是一个独立的微服务应用
,用来连接配置服务器并为客户端提供获取配置信息
,
加密
/
解密信息等访问接口。
客户端则是通过制定的配置中心来管理应用资源
,
以及与业务相关的配置内容
,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用
git
来存储配置信息
,
这样就有助于对环境配置进行版本管理
,并且可以通过
git
客户端工具来方便的管理和访问配置内容。
?
一个使用微服务架构的应用系统可能会包括成百上千个微服务,配置各部相同,需求各不相同:?
不同环境不同配置:例如数据源在不同的环境(开发
,
测试
,
生产)是不同的
,
可以通过配置中心
运行期间可以动态调整。例如根据各个微服务的负载状况
,
动态调整数据源连接池大小或者熔断阀
值
,
并且调整时不停止微服务(配置修改后可以自动更新)
?
导入nacos-config依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
??<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
Spring Cloud Alibaba Nacos Config Nacos
提供用于存储配置和其他元数据的
key/value
存储
,为分布式系统中的外部化配置提供服务器端和客户端支持。
使用
Spring Cloud Alibaba Nacos Config,
您可以在
Nacos Server
集中管理你
Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config
是
Config Server
和
Client
的替代方案
,客户端和服务器上的概念与Spring Environment
和 PropertySource有着一致的抽象
在特殊的
bootstrap
阶段
,
配置被加载到
Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时
,
您可以管理这些环境之间的配置
,
并确保应用程序具有迁移时需要运行的所有内容。
bootstrap.yml?
SpringBoot默认支持properties和YAML两种格式的配置文件。
bootstrap.yml
(
bootstrap.properties
)用来程序引导时执行
,
应用于更加早期配置信息读取
,如可以使用来配置
application.yml
中使用到参数等
application.yml
(
application.properties)
应用程序特有配置信息
,可以用来配置后续各个模块中需使用的公共参数等。
bootstrap.yml
先于
application.yml
加载
?导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
?? <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
server:
port: 8083
spring:
application:
name: provider
cloud:
nacos:
server-addr: localhost:8848
config:
server-addr: ${spring.cloud.nacos.server-addr}
prefix: ${spring.application.name}
file-extension: yaml
group: DEFAULT_GROUP
shared-configs:
- data-id: redis.yaml
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
refresh: true # 是否自动刷新配置,默认为 false
@RefreshScope
实现配置实时更新
@SpringBootApplication
@EnableDiscoveryClient
@RefreshScope
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
也可通过cmd命令运行
java
-
jar xx.jar
java
-
jar xx.jar
--
spring.cloud.nacos.config.namespace=xxx