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++指针与堆栈空间的话这方面还是蛮好想的