架构-实例
文章平均质量分 75
架构-实例
秃了也弱了。
即使没有万全准备,也要勇敢迈出第一步。无论远方的风雨有多大、路有多难走。风里雨里陪伴你们,赠人玫瑰,手有余香。在技术领域,我会一如既往的坚持下去。
展开
-
SpringCloud-gateway编码实现路由策略的自动刷新,动态路由
gateway可以配置路由断言过滤器,但是通常一个微服务体系下,一个gateway网关对应多个微服务,如果上线一个新的微服务或者修改一个微服务,修改网关路由配置之后,通常需要重启网关之后,路由配置才会生效,这样的影响会比较大。考虑实现gateway的动态路由,不重启网关即可生效路由。/*** 自定义RouteDefinition/*** 路由状态 0禁用 1启用} }/*** 自定义RouteDefinition/*** 路由状态 0禁用 1启用。原创 2024-08-08 10:57:29 · 967 阅读 · 0 评论 -
Nacos扩展:使用nacos实现自定义文本配置的实时刷新
但是,我们有时候使用nacos配置的并不是key-value形式的配置文件,而是txt形式的或者其他文本格式,就无法使用@RefreshScope进行动态实时刷新了。如果说要加载本地文件,本地文件加载时间要早于ApplicationReadyEvent 触发的时间,可以考虑使用Bean初始化的生命周期。我们都知道,使用Nacos时,如果将Bean使用@RefreshScope标注之后,这个Bean中的配置就会做到实时刷新。所以,我这里自行扩展了一个框架,可以稍微简化一些开发人员的工作。原创 2024-05-08 08:19:29 · 494 阅读 · 0 评论 -
SpringBoot使用ResponseBodyAdvice和RequestBodyAdvice实现请求体解密、响应体加密
项目中经常需要对接第三方平台,每次对接都需要对接收的参数进行加密、响应参数进行解密,所以通过SpringMVC的扩展点,实现一个统一的方法,对请求体进行加解密。/*** @description: : 请求参数解密/*** @description: : 请求参数解密/*** @description: : 请求参数解密/*** @description: : 请求参数解密*//*** @description: 响应参数加密/**原创 2024-04-29 14:54:40 · 946 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(五)手写一个编程式AOP
Retention;Target;/*** 这是一个Advice/*** 这相当于around通知try {System . out . println("前置通知");System . out . println("后置通知");System . out . println("异常通知");throw e;System . out . println("最终通知");} } }/**原创 2024-04-25 08:33:01 · 411 阅读 · 0 评论 -
Spingboot落地国际化需求,Springboot按照请求的地区返回信息
国际化(internationalization)是设计和制造领域适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。/*** 国际化相关* @return*/@Beantest=中国Success={0}成message功Test=我的test内容/*** 国际化相关} }/**原创 2024-04-09 21:23:48 · 794 阅读 · 1 评论 -
Springboot动态切换数据源实现多租户架构
一个支持多租户技术的系统需要在设计上对它的数据和配置进行虚拟分区,从而使系统的每个租户或称组织都能够使用一个单独的系统实例,并且每个租户都可以根据自己的需求对租用的系统实例进行个性化配置。使用数据库级别的数据隔离是实现多租户架构的一种常见方式。数据隔离是指在多租户架构中,保持各个租户之间的数据相互独立,确保一个租户的数据不会被其他租户访问或篡改。进一步我们可以总结出,可以通过当前登录的用户session,来获取到该用户的租户信息,并通过租户信息来获取到该租户所持有的数据源,来实现多租户的数据隔离。原创 2024-04-09 21:23:16 · 940 阅读 · 0 评论 -
使用SpringAOP+Caffeine+Redis实现本地缓存与多级缓存
*** 本地缓存// 过期时间 默认10分钟 long expired() default 600;// key创建器 String keyGenerator() default "org.springframework.cache.interceptor.KeyGenerator";/*** 本地缓存// 过期时间 默认10分钟 long expired() default 600;原创 2024-03-22 08:44:24 · 693 阅读 · 0 评论 -
使用AOP+SPEL实现业务日志收集
*** 日志注解User , // 用户 Role , // 角色 Order , // 订单 Product , // 产品 } /*** 操作的动作,如增、删、改等/*** 操作的业务类型,如用户、角色、订单等/*** 操作的用户的ID(Spel)/*** 操作的资源的ID(如订单id)/*** 操作之前的原数据(SpEL)/*** 操作之后的新数据(SpEL)/*** 日志注解。原创 2024-03-07 13:53:42 · 640 阅读 · 1 评论 -
使用SpringAOP+Redis实现接口处理幂等
该注解标注在Controller层,可以根据项目需要进行参数调整,比如说可以实现按指定字段判断幂等、实现接口的限流、指定幂等的判断条件等等。/*** 实现幂等的注解/*** 实现幂等的注解/*** 实现幂等的注解/*** 实现幂等的注解/*** 实现幂等的注解Retention;/*** 实现幂等的注解/*** 实现幂等的注解/*** 实现幂等的注解/*** 实现幂等的注解Target;原创 2023-11-13 15:01:14 · 146 阅读 · 0 评论 -
springboot使用@JsonComponent和StdSerializer实现返回数据的自定义序列化
我们都知道springboot使用@ResponseBody时返回的对象会转成json格式,但是返回的数据格式我们需要调整怎么办?(比如说日期格式的调整、枚举显示的调整等等)此时,就可以用到序列化器,将返回的值进一步格式化成我们想要的样子。/***测试自定义序列化}/***测试自定义序列化}使用该序列化器可以使返回的结果输出为我们想要的样子。但是如果想要输入的结果也想要自定义呢?答案可以用自定义参数解析器,或者反序列化器。httpshttps。......原创 2022-07-21 15:07:47 · 1410 阅读 · 0 评论 -
spring MVC使用自定义的参数解析器解析参数
spring MVC使用自定义的参数解析器解析参数原创 2022-03-22 21:15:00 · 1124 阅读 · 0 评论 -
基于SpringAOP实现自定义接口权限控制
使用枚举进行权限的定义,通过四级权限树,将权限分为模块、单元、功能级、接口。/*** 接口权限枚举定义类*//*** 四级权限树* 1 模块* - 2 功能* - - 3 接口集(一般是Controller)* - - - 4 具体接口(@RequestMapping)*/// 用户管理User("user", "用户", Type.Module),SysUser(User, "系统用户", Type.Unit),原创 2023-11-06 10:03:39 · 395 阅读 · 0 评论 -
Springboot扩展-自定义实现分布式延时任务模块,Enable扩展
目前市面上实现延时消息有比较多的成熟的中间件,RocketMQ、Kafka、RabbitMQ等等,这些中间件确实十分成熟,但是比较重。本文手把手教你基于Java延时队列实现一个轻量级分布式延时消息,如有瑕疵还请大佬指正!/*** 开启倒计时功能// 线程数 int poolSize() default 20;/*** 开启倒计时功能// 线程数 int poolSize() default 20;/*** 开启倒计时功能。原创 2023-02-07 16:03:26 · 1240 阅读 · 2 评论 -
Java重构实战:动手实现一个配置加载器,并使用设计模式进行优化
自研项目中,很多时候并没有考虑使用Spring或者Springboot框架,以至于Spring那些简化配置的神器无法使用,此时就需要自己手写一个配置加载器。原创 2023-09-26 13:33:20 · 304 阅读 · 0 评论 -
Java实现简单RPC框架,Springboot + javaSocket实现简易的RPC框架
RPC框架通常有基于http方式的(OpenFeign),还有tcp方式的(dubbo),我们今天就尝试使用Java的Socket自己封装一个RPC框架。客户端与服务器端之间的信息传输,就是使用该类进行传输// 类名 private String methodName;// 方法名 private Object [ ] args;// 方法参数 private Class [ ] types;// 返回值类型 // ...get set }原创 2023-06-01 11:24:15 · 1800 阅读 · 0 评论