config配置中心
config配置中心
官方资料:
https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.1.RELEASE/reference/html/
SpringCloud Config概述
是什么
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用
的所有环境提供了一个中心化的外部配置
。
SpringCloud Config分为服务端
和客户端
两部分。
服务端也称为分布式配置中心
,它是一个独立的微服务应用
,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
应用场景
不同环境不同配置,动态化的配置更新,分环境部署比如dev/uat/prod,db、redis等连接配置信息。
运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息。
Config服务端配置与测试
新建Module模块cloud-config-center-3344
pom
<?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>tudou_cloud</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-config-center-3344</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在gitee新建一个仓库
上传两个yml文件
yml
server:
port: 3344
spring:
application:
name: cloud-config-center #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: https://gitee.com/liurui_60837/cloud_config.git #GitHub上面的git仓库地址
####搜索目录
search-paths:
- cloud_config #GitHub上面的git仓库名字
username: liurui_60837
password: '{cipher}ec3db84869cfc0ee273237efb4472209ca40877c111f70453d16f3454a919568'
####读取分支
label: master
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
其中如果gitee仓库是私有的,则需要用户密码,参考官网可以把密码加密。
主启动
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {
public static void main(String[] args) {
SpringApplication.run(ConfigCenterMain3344.class, args);
}
}
测试:
访问:http://localhost:3344/master/config-dev.yml
通过url可以访问config-dev.yml文件的内容
Config客户端配置与测试
模拟之前的8002客户端分别访问不同环境的数据库
这里创建两个不同的数据dbdev、dbprod
配置gitee对应的yml
config-dev.yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包 com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/dbdev?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
config-prod.yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包 com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/dbprod?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
配置客户端yml
这里采用bootstrap.yml的方式。
- applicaiton.yml是用户级的资源配置项
- bootstrap.yml是系统级的,优先级更加高
- 要将Client模块下的application.yml文件改为bootstrap.yml,这是很关键的
- 因为bootstrap.yml是比application.yml先加载的。bootstrap.yml优先级高于application.yml
server:
port: 8002
spring:
application:
name: cloud-provider-service
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: prod #读取后缀名称,这里改为dev则读取的dev的数据库
uri: http://localhost:3344 #配置中心地址
eureka:
client:
#表示是否将自己注册进EurekaServer默认为true。
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
instance:
instance-id: payment8002
prefer-ip-address: true #访问路径可以显示IP地址
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.atguigu.springcloud.entities # 所有Entity别名类所在包
pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
测试
访问:http://localhost:8002/payment/get/1
当yml配置文件的profile
属性为prod时
当yml配置文件的profile
属性为dev时