Spring Cloud应用实现配置自动刷新过程详解
这篇文章主要介绍了Spring Cloud应用实现配置自动刷新过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
通过spring cloud 的消息总线,将配置github 等源代码仓库的变更通知到spring cloud 的所有组件。
spring-bus 需要用到rabbitmq ,所以需要提前准备rabbitmq消息队列环境
配置中心调整
1.配置中心配置引用pom
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-monitor</artifactId> </dependency>
2. 配置中心配置
spring: application: name: spring-config cloud: config: server: git: uri: https://github.com/halouprogramer/spring-config-repository.git # username: *** # password: *** basedir: ~/temp/gitlab rabbitmq: #增加rabbitmq的配置 host: 192.168.114.129 port: 5672 username: admin password: admin eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true server: port: 3636 management: endpoints: web: exposure: include: "*"
业务微服务中需要做的修改
1.添加pom
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
2. 配置文件
spring: application: name: spring-school cloud: config: discovery: enabled: true service-id: SPRING-CONFIG profile: dev bus: #bus id 不能使用默认,否则不能刷新 id: ${spring.application.name}:${spring.cloud.config.profile}:${random.value} profiles: active: dev rabbitmq: host: 192.168.114.129 port: 5672 username: admin password: admin eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true #配置超时时间 feign: client: config: default: connectTimeout: 5000 readTimeout: 5000 # logger-level: bus
spring cloud bus 会使用 bus id 去匹配应用,匹配上才会刷新配置
3.编写测试代码
package com.lvlvstart.spring.demo.school.service; import com.lvlvstart.spring.demo.school.dao.SchoolRepository; import com.lvlvstart.spring.demo.school.entity.School; 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.Service; import java.util.List; import java.util.Optional; /** * @author zishu.lv@baodanyun-inc.com * @description 类描述 * @create 2019/12/9 15:53 */ @Service @RefreshScope public class SchoolService { @Value("${env}") private String env; @Autowired private SchoolRepository repository; public List<School> findAll(){ return repository.findAll(); } public School findById(String choolId){ Optional<School> school = repository.findById(choolId); if(school.isPresent()){ return school.get(); } return null; } public String getEnv(){ return env; } }
package com.lvlvstart.spring.demo.school.web; import com.lvlvstart.spring.demo.school.service.SchoolService; 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.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("config-demo") public class ConfigDemoController { @Autowired private SchoolService schoolService; @GetMapping("get-env") private String getEnv(){ return schoolService.getEnv(); } }
@RefreshScope 标记上才会被刷新配置
@RefreshScope 在Controller层使用,取不到值
利用githbu webhook 自动实现刷新配置:
Payload URL 需要添加config server 开放的monitor(monitor 为spring 自带地址) ,如果在内网,可以搜索内网穿透工具配置
修改仓库配置后,访问地址:http://localhost:8081/config-demo/get-env 地址也会发生改变
完整代码访问:https://github.com/halouprogramer/spring-cloud-demo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
上一篇:Spring实战之ResourceLoaderAware加载资源用法示例
栏 目:Java
本文标题:Spring Cloud应用实现配置自动刷新过程详解
本文地址:https://www.xiuzhanwang.com/a1/Java/8778.html
您可能感兴趣的文章
- 01-10Springboot中@Value的使用详解
- 01-10springboot实现文件上传步骤解析
- 01-10springboot jta atomikos实现分布式事物管理
- 01-10SpringBoot使用RabbitMQ延时队列(小白必备)
- 01-10如何基于SpringBoot部署外部Tomcat过程解析
- 01-10SPRING BOOT启动命令参数及源码详析
- 01-10springboot集成fastDfs过程代码实例
- 01-10springmvc级联属性处理无法转换异常问题解决
- 01-10SPRINGBOOT读取PROPERTIES配置文件数据过程详解
- 01-10Spring注解和同步锁不能同步问题解决
阅读排行
本栏相关
- 01-10Java实现动态模拟时钟
- 01-10Springboot中@Value的使用详解
- 01-10JavaWeb实现邮件发送功能
- 01-10利用Java实现复制Excel工作表功能
- 01-10Java实现动态数字时钟
- 01-10java基于poi导出excel透视表代码实例
- 01-10java实现液晶数字字体显示当前时间
- 01-10基于Java验证jwt token代码实例
- 01-10Java动态显示当前日期和时间
- 01-10浅谈Java中真的只有值传递么
随机阅读
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 01-11ajax实现页面的局部加载
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?