实习期间后端问题4

1.spring cloud config 配置中心

Spring Cloud Config 实现配置中心,看这一篇就够了-腾讯云开发者社区-腾讯云 (tencent.com)
(主要还是文章中的使用 Spring Cloud Bus 来自动刷新多个端)
Spring Cloud构建微服务架构(七)消息总线 | 程序猿DD (didispace.com)
在这里插入图片描述

动态刷新

  • 发送POST请求到其中一个/actuator/bus-refresh端点时,Spring Cloud
    Bus会处理该请求,并将刷新配置的消息通过消息代理广播给其他使用了Spring Cloud Bus的服务。
  • 具体来说,Spring Cloud
    Bus会将刷新配置的消息封装成一个事件(通常是RefreshRemoteApplicationEvent),然后通过配置的消息代理(如RabbitMQ或Kafka)将该事件广播给其他服务。其他服务订阅了该消息代理,并使用Spring
    Cloud Bus监听并接收到这个事件。
  • 一旦其他服务接收到刷新配置的事件,它们会重新获取最新的配置,并更新相应的配置项。这样就实现了配置文件的实时刷新。
  • 当引入Spring Cloud Bus依赖后,它会自动监听并接收RefreshRemoteApplicationEvent事件。
  • Spring Cloud
    Bus会自动注册一个事件监听器,用于接收从消息代理中广播的事件。当有新的RefreshRemoteApplicationEvent事件被广播时,Spring
    Cloud Bus将会接收到该事件,并触发相应的处理逻辑。
  • 在接收到RefreshRemoteApplicationEvent事件后,Spring Cloud
    Bus会通知应用程序上下文中的所有Bean进行配置刷新。这意味着使用了@RefreshScope注解的Bean将会重新初始化,从而获取最新的配置。

嗯,感觉还是nacos方便一点。

2.多配置切换

[SpringBoot] 使用yaml文件实现多配置 - 郑晓龙 - 博客园 (cnblogs.com)
yml文档块:

#公共配置
spring:
  profiles:
    active: pro #使用名为pro的配置,这里可以切换成dev
  datasource:
    url: jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
    password: 123456
    username: root
---
#开发环境配置
spring:
  profiles: dev #profiles属性代表配置的名称

server:
  port: 8080
---
#生产环境配置
spring:
  profiles: pro

server:
  port: 80

代码中一共有三个yml文档块,其中在没有配置spring:profiles:active的情况下,默认会使用第一个文档块的配置。当在配置的情况下,会根据配置的值去使用哪个yml文档块的配置。

经过测试若独立配置块有和公共配置块相同的配置,那么使用独立配置块的配置,否则使用公共配置块

如果配置复杂,还是拆分为多yml文件最好

3.配置文件优先级

配置文件优先级解读-腾讯云开发者社区-腾讯云 (tencent.com)

当本地application.properties文件和bootstrap.properties文件中配置了同样的属性不同的值,由于bootstrap的优先级高,

则在bootstrap中的属性不会被application中的覆盖,反而会覆盖掉application中的配置

4.Arrays.binarySearch()

binarySearch()方法的返回值为:

1、如果找到关键字,则返回值为关键字在数组中的位置索引,且索引从0开始

2、如果没有找到关键字,返回值为负的插入点值,所谓插入点值就是第一个比关键字大的元素在数组中的位置索引,而且这个位置索引从1开始。 (-(insertion point) - 1)即为正确插入点

5.@FeignClient

在这里插入图片描述
OpenFeign的介绍和使用(服务接口调用)_springmvc openfeign_这个名字先用着的博客-CSDN博客

6.foreach无法改值

使用中发现foreach改值失效,后了解到无法更改遍历对象的值,只能改遍历对象的成员变量的值。感觉应该就是值传递与引用传递的问题,java都是值传递,那么实际上遍历的时候都是副本,自然不能更改原本对象,只不过传递对象的话是传递的地址,那么就可以根据地址改其中成员变量的值。理解c++指针与堆栈空间的话这方面还是蛮好想的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值