摘要: 出于一些特殊需求,比如需要运行期修改三方依赖的配置(第三方无法配合,或者拒绝配合),需要一种方案可以在第三方类在其静态块加载属性前修改系统属性,使得支持运行期动态调整。 目前项目基于springboot2.x,但基于的原理1.x也可以支持。细节如下: springboot启动后,会驱动到Spring 阅读全文
posted @ 2021-01-13 19:41 飞昂之雪 阅读(382) 评论(0) 推荐(0) 编辑
摘要: Spring的属性绑定有很多种方式,比如: @Value+spel表达式; @ConfigurationProperties + spring-boot-configuration-processor依赖; 动态注册BeanPostProcessor,在定义的配置bean装配期间依赖Binder o 阅读全文
posted @ 2020-12-25 14:58 飞昂之雪 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 在写了无数3层架构的业务代码后,经常痛苦的发现,facade或者service层的业务逻辑膨胀的太厉害,一段时间后梳理整个业务逻辑会成为一个困难的事情。 问题出在哪? 业务膨胀的层中,往往包含这些逻辑: 对象转换 逻辑编排 资源存取 面向库表的编程中,这些逻辑会基于一个顺序流程在整个业务过程中反复。 阅读全文
posted @ 2020-12-01 16:08 飞昂之雪 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 成规模后的业务系统,一般都会走到微服务拆分的阶段。虽然这种方式有各种弊端,但也有显而易见的好处。 先说好处: 业务按从属范围可以做到内聚较高,仅在边界处通过接口耦合 资源的管控更细腻,提升资源利用率 团队职责更明晰,成员技能更深入专注,进而更好的反馈业务价值 多业务线协作更顺畅,敏捷模式有一个良好的 阅读全文
posted @ 2020-11-27 16:48 飞昂之雪 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 在业务上,对于热点key的定义一般有如下特征: 访问频次较大 访问在时间维度有稠密稀疏等明显区别 key的数量规模可大可小 数据可能有一定的刷新需求 那什么场景下会存在这种热点key呢? 典型场景如: 缓存读: 首页 商品详情 一般打开应用或者小程序之类的,默认会跳转到首页,故而这个页面的数据日常流 阅读全文
posted @ 2020-11-26 00:22 飞昂之雪 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 高并发场景下,如果需要锁的存在,可以视对锁的需求来处理,比如仅做数值统计,条件翻转,严格串行,逻辑唯一,允许重试等。不同的情况有不同的处理方式。 数值统计&条件翻转 针对数值统计,可以依赖Atomic下的各种计数器来实现。但是,如果竞争线程非常多,竞争激烈的场合,还可以进一步使用比如LongAdde 阅读全文
posted @ 2020-11-10 16:22 飞昂之雪 阅读(279) 评论(0) 推荐(0) 编辑
摘要: Synchronized是jvm提供支持的锁,和Lock有很多区别。 针对Synchronized,jvm支持不同层次的实现。按竞争烈度来说,Synchronized会有偏向锁,轻量级锁,重量级锁等3种类型。 针对对象而言,在对象头上的Mark word上会存储锁信息(包括:偏向线程ID、偏向时间戳 阅读全文
posted @ 2020-11-10 15:30 飞昂之雪 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 发布流程: 引用流程: 阅读全文
posted @ 2020-10-27 15:11 飞昂之雪 阅读(77) 评论(0) 推荐(0) 编辑
摘要: dubbo的路由规则,是基于invoker集合进行筛选,过滤出可用的invoker集合用于后续的执行。 网关黑白名单场景如下所示: 黑白名单的数据来源一般分两类,一类是静态内置,如: 来自某个网段的请求加入黑名单 来自预设的指定IP列表的请求加入黑名单 第二类是动态列表,比如来自flink按时间区间 阅读全文
posted @ 2020-10-22 16:38 飞昂之雪 阅读(468) 评论(0) 推荐(0) 编辑
摘要: dubbo的扩展机制比较多,有@Activate,@Adaptive,@SPI,Wrapper等方式扩展功能。 每一种方式的适用场景是不太一样的,在此分别予以解释。 @Activate 一般用于过程中动态装载,根据group,value与order的值动态组装一组实例为调用过程赋能。其通过Exten 阅读全文
posted @ 2020-10-20 16:55 飞昂之雪 阅读(252) 评论(0) 推荐(0) 编辑