SpringCloud-config
配置中心:
遇到了什么问题?
在微服务群下,一个服务往往有多个实例,同一个服务下的多个实例中配置内容都是一样的.
当配置更新时,需要停止所有的实例,并一一修改配置,再重启.这个操作相当繁琐.
哪个技术可以解决这个问题?
将配置文件从服务实例中抽离.
SpringCloud-config:
Nacos
file: 独立的数据文件
redis
这个技术如何使用?
1.在码云中创建仓库添加配置文件
2.创建config服务端,并连接gitee码云,从码云中获取配置信息
3.在微服务中导入config的客户端依赖,从config的服务端获取最新的配置信息
1.在码云中创建仓库并添加文件
注意:
1.创建一个文件夹,并添加配置文件(在码云中不能创建空文件夹和空文件)
2.添加完配置文件后,将仓库改为公开状态
2.搭建config服务端
2.1 导入依赖
<dependencies>
<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- config的服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- actuator: 监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
2.2 添加配置
server:
port: 8888
spring:
application:
name: config-service
cloud:
config:
server:
git: #配置存储信息的Git仓库
# username:
# password:
uri: https://gitee.com/huahua/huahua2a-config.git # 仓库地址
clone-on-start: true # 启动时直接从gitee拷贝数据
search-paths: config # 搜索目录
default-label: master # 默认的分支
label: master #分支信息
#management:
# endpoints:
# web:
# exposure:
# include: bus-refresh # config服务端开发端口,通过post访问
# base-path: /actuator
#顶格放
eureka:
client:
service-url:
# defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka,http://127.0.0.1:10088/eureka
defaultZone: http://127.0.0.1:10086/eureka
instance: # 在Eureka中显示服务的ip地址
ip-address: 127.0.0.1 # 配置服务器ip地址
prefer-ip-address: true # 更倾向于使用ip,而不是host名
instance-id: ${eureka.instance.ip-address}:${server.port} # 自定义实例的id
2.3 编写引导类开启支持
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* @Author: xushuai
* @name:ConfigApp
* @Date:2023/7/21 16:16
*/
@SpringBootApplication
// 开启config服务端支持
@EnableConfigServer
public class ConfigApp {
public static void main(String[] args) {
SpringApplication.run(ConfigApp.class,args);
}
}
2.4 启动并测试
访问服务端方式: 浏览器
配置文件名: userservice-dev.yml
http://localhost:8888/userservice/dev
http://localhost:8888/userservice-dev.yml
3.搭建客户端
3.1 导入依赖
<!--配置中心的客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
3.2 编写配置
# 引导配置文件,项目启动时最先被加载
server:
port: 6001
spring:
application:
name: config-client-service
cloud:
config: #Config 客户端配置
uri: http://localhost:8888 #配置中心地址
label: master #分支名称
name: userservice #配置文件名称
profile: dev #启用配置后缀名称
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
instance: # 在Eureka中显示服务的ip地址
ip-address: 127.0.0.1 # 配置服务器ip地址
prefer-ip-address: true # 更倾向于使用ip,而不是host名
instance-id: ${eureka.instance.ip-address}:${server.port} # 自定义实例的id
3.3 测试
/**
* @Author: huahua
* @name:ClientController
* @Date:2023/7/21 16:25
*/
@RestController
@RequestMapping("/client")
public class ClientController {
@Value("${myattr}")
private String myattr;
// 读取外部的配置信息
@Value("${str}")
private String str;
@Value("${str2}")
private String str2;
@RequestMapping("/attr")
public String attr(){
return myattr;
}
@RequestMapping("/str")
public String str(){
return str+" : "+str2;
}
}
然后访问就可以看到我们的配置是从gitee上拉取的