java微服务的统一配置中心
2024-08-26 21:33:00
为了更好的管理应用的配置,也为了不用每次更改配置都重启应用,我们可以使用配置中心
关于eureka的服务注册和rabbitMQ的安装使用(自动更新配置需要用到rabbitMQ)这里不赘述,只关注配置中心的内容
我们需要引入关键的包是这三个
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
需要在启动类加上@EnableConfigServer注解,这里有个busRefresh2方法需要讲下,其实这里有个坑,如果在github的webhook直接访问/actuator/bus-refresh是有json转换错误的,
因为github触发webhook的时候会带一大串字符,就是这段字符引发json转换错误,所以我们在这里包装下/actuator/bus-refresh
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
@RestController
public class ConfigApplication {
@PostMapping("/actuator/bus-refresh2")
@ResponseBody
public Object busRefresh2(HttpServletRequest request, @RequestBody(required = false) String s) {
System.out.println(s);
return new ModelAndView("/actuator/bus-refresh");
}
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
} }
然后在配置文件上加上这些内容,主要是配置github上的配置文件的路径,配置rabbitMQ和启用bus-refresh端点。
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://github.com/skychmz/config.git
username: skychmz
password: xxxxxxx
rabbitmq:
host: localhost
username: guest
password: guest management:
endpoints:
web:
exposure:
include: bus-refresh
如果某个服务需要使用配置中心,先引入以下包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
在yml配置文件上加上如下配置,主要是开启配置中心,我们的配置中心的服务名是CONFIG
spring:
cloud:
config:
discovery:
enabled: true
service-id: CONFIG
把该服务的配置文件放到github,注意eureka的配置还是要放本地的,因为服务启动的时候要先访问eureka才会找到CONFIG服务
配置github的webhooks,这里我用的是内网穿透的地址
在需要刷新配置的地方加上@RefreshScope注解,这样就完成了。当我们更改github上的配置文件之后,GitHub就会触发webhook从而自动刷新配置。
最后提一下如果zuul网关服务也需要自动刷新配置的话可以在启动类加一个方法返回一个ZuulProperties(),当然还要加上@RefreshScope注解
@SpringBootApplication
@EnableZuulProxy
public class ApiGatewayApplication { public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
} @ConfigurationProperties("zuul")
@RefreshScope
public ZuulProperties zuulProperties() {
return new ZuulProperties();
}
}
最新文章
- Python全栈开发【面向对象】
- parawork平台介绍
- Linux常用命令及shell脚本
- iOS设计模式和机制之观察者模式
- 纯jsp用户登录系统
- 在c#中运行js脚本(将js文件生成为.dll文件)
- 微软成立反网络犯罪中心,工作环境如美剧CSI情景
- 负margin在布局中的运用
- 键盘样式风格有关设置-iOS开发
- php数组遍历 使用foreach
- maclean-【性能调优】Oracle AWR报告指标全解析 学习笔记
- freemarker.core.ParseException:Unexpected end of file reached
- VUE系列一:VUE入门:搭建脚手架CLI(新建自己的一个VUE项目)
- Python3学习笔记32-xlwt模块
- Linux应该知道的技巧
- hibernate一级缓存和快照
- day 0313函数的初识
- php开启pdo扩展
- react-navigation实现页面框架(转载)
- hdu4614 Vases and Flowers 线段树