
java
文章平均质量分 77
Johar
蓝是天的颜色、红是火的象征,我不学大海抄袭天的蓝、也不学晚霞模拟火的红。我就是我,生命是我的、命运是我的。
展开
-
Spring Cloud Gateway源码
默认情况下,Spring Cloud Gateway 会根据服务注册中心(例如 Eureka Server)中维护的服务列表,以服务名(spring.application.name)作为路径创建动态路由进行转发,从而实现动态路由功能。使用Spring cloud开发微服务系统,一般采用的架构如下所示,Gateway不仅作为请求转发的入口,还会进行权限验证、监控、缓存、请求路由、流量限制、请求熔断、请求重试等功能。lb:uri 的协议,表示开启 Spring Cloud Gateway 的负载均衡功能。原创 2023-02-06 18:37:45 · 1566 阅读 · 0 评论 -
FeignClient中LoadBalancer源码解析
FeignBlockingLoadBalancerClient#excute是LB的核心代码逻辑,主要包括三个方面,一个是LB的生命周期管理,一个是灰度策略;一个负载均衡选择后端服务实例。条件加载的逻辑在FeignLoadBalancerAutoConfiguration 中,默认是DefaultFeignLoadBalancerConfiguration。实际上FeignClient中LoadBalancer与LoadBalancer差不多,也是处理灰度策略、负载均衡策略,最后执行http请求。原创 2023-01-22 20:37:57 · 761 阅读 · 0 评论 -
LoadBalancer源码解析
此外,负载均衡还和ServiceInstanceListSupplier#get方法有关,灰度策略就是在HintBasedServiceInstanceListSupplier重新实现了get方法,实现了灰度调度功能,源码分析以HintBasedServiceInstanceListSupplier为例进行分析。LB拦截器里面实现了intercept方法,将LB负载均衡逻辑的需要的参数装填好,调用LoadBancerClient的execute方法。最后就是进行http请求。原创 2023-01-22 20:08:07 · 1577 阅读 · 0 评论 -
Spring RestTemplate请求过程
目前Spring RestTemplate是常用的http请求工具类,本文简单Spring RestTemplate的请求过程。原创 2022-12-09 00:31:12 · 822 阅读 · 0 评论 -
jvm参数造成http请求Read time out
线上部署的代码,部署在测试环境突然抛出接口请求Read time out的异常。查看线上日志,接口请求正常。重新启动,部署测试环境代码都没有效果,接口还是必现Read time out。直接在测试环境服务器上执行使用curl命令执行http请求,接口正常返回,所以排查网络,第三方服务的原因。解决这类问题,最简单的方法就是抓一个正常的http请求包,抓一个Read time out异常的http请求包,对比两个的报文。但是事与愿违,容器环境禁用tcpdump命令,也就抓不了包。启动本地代码连接测试环境配置原创 2022-12-06 00:59:49 · 2922 阅读 · 0 评论 -
Redis序列化Jackson2JsonRedisSerializer坑
项目上使用Jackson2JsonRedisSerializer 给value做序列化。近期由于在进行项目重构,调整了包的组织结构,导致存在载redis对象class路径发生变化。在发布后,读取redis里面数据解析失败。原创 2022-11-23 21:30:16 · 1312 阅读 · 0 评论 -
Java开发常见错误
具体shardingsphere如上图所示,根据配置的脱敏规则,在执行insert、update的时候,将逻辑列和逻辑列的值,转换成密文列和密文值,进行存储。反之,在执行select语句的时候,则找到对应的密文列,将密文值解密赋值给逻辑列。软件架构采用SpringBoot + MyBatis + Mysql的方式,insert 语句是自动生成的,PO也是通过数据库表自动解析的。发现有几个字段,如source是mysql的关键字,所以猜测是这个问题,于是加上··即可正常运行。原创 2022-10-12 23:11:12 · 303 阅读 · 0 评论 -
常见的设计原则
系列文章目录第一章 经典23种设计模式总结第二章 常见的设计原则第三章 重构文章目录系列文章目录前言一、SOLID1.单一职责原则2.开闭原则3.里式替换原则4.接口隔离5.迪米特法则二、其他1.KISS2.YAGNI3.DRY前言每个码农工作1-2年后,就不是仅仅完成导师或者领导安排的user story,还要考虑如何编写高质量的代码,确保的user story背后隐藏的非功能需求,即常说的代码的可维护性,可读性,可拓展性,灵活性,简洁性,可复用性,可测试性。我们可以通过设计思想,设计原则原创 2022-03-20 16:31:14 · 389 阅读 · 0 评论 -
经典23种设计模式总结
编写高质量代码系列文章目录第一章 经典23种设计模式总结第二章 设计原则第三章 重构经典23种设计模式总结编写高质量代码系列文章目录前言一、创建型1.单例模式2.工厂模式3.建造模式4.原型模式二、结构型1.代理模式2.桥接模式3.装饰器模式4.适配器模式5.门面模式6.组合模式7.享元模式三、行为型1.观察者模式2.模板模式3.策略模式4.职责链模式5.迭代器模式6.状态模式7.访问者模式8.备忘录模式9.命令模式10.解释器模式11.中介模式四、总结前言每个码农工作1-2年后,就不是仅仅原创 2022-03-20 16:08:45 · 493 阅读 · 0 评论 -
限制后端接口调用次数
系列文章目录第一章 AOP后端控制接口调用次数第二章 前后端配合控制接口调用次数文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的原创 2022-01-15 23:57:35 · 1204 阅读 · 0 评论 -
SpringCloud自定义配置-PropertySourceLocator
文章目录背景一、PropertySourceLocator二、原理1、源码2.使用背景项目上需要在SpringCloud的基础上,拓展SpringCloud的配置文件,所以使用了PropertySourceLocator来拓展SpringCloud的配置文件。一、PropertySourceLocatorPropertySourceLocator接口主要是需要实现PropertySource<?> locate(Environment environment)接口即可,具体源码如下:.原创 2021-10-15 23:22:03 · 3201 阅读 · 0 评论 -
axis2生成webservice java代码
首先要选择工程中对应的 axis2的jar包版本,不然生成的文件编译会报错,如 axis2-1.5.1 、axis2-1.5.2等然后用命令行操作生成客户端代码文件:cmd 进入命令行界面, F: 进入F盘 , cd F:\webService\axis2-1.6.2\bin 进入这个bin目录bin所在目录下执行set JAVA_OPTS=-Xmx512Mwsdl2java -uri F:\webService\mag.wsdl -p com.hikvision.cms.wsclient.s原创 2021-05-06 23:58:19 · 248 阅读 · 0 评论 -
Java类加载器
JVM初窥一、JVM类加载器二、JVM内存模型1.引入库2.读入数据三、JVM启动参数一、JVM类加载器示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、JVM内存模型1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarning原创 2021-03-07 12:16:16 · 295 阅读 · 1 评论 -
Java字节码初窥
Java字节码初窥一、字节码是什么?二、字节码结构2.1 示例2.2 class整体结构2.2.1 魔数2.2.2 JDK版本号2.2.3 常量池2.2.4 访问标记2.2.5 当前类索引2.2.6 父类索引2.2.7 接口索引2.2.8 字段表2.2.9 方法表2.2.10 附加属性三、字节码指令解读四、字节码实例解读一、字节码是什么?“一次编写,到处运行”的口号,是Java拥有目前如此庞大的用户群的一个基石。其中的原因是:JVM针对各种操作系统进行定制,屏蔽了系统差异;Java编译之后生成字原创 2021-02-25 00:42:48 · 388 阅读 · 2 评论 -
Java、C++的区别
Java、C++的区别前言一、内存管理二、跨平台的方式2.1 C++源码跨平台2.2 Java字节码跨平台三、其他前言最近两年公司技术改革,开始大规模使用微服务技术,将共性的业务抽取提炼成基础的组件和引入常用的基础组件作为基础组件,如:RabbitMq、Kafka、ES等。然后各个行业,根据各自的业务,提炼行业共性组件;其他的特定需求,抽取成行业特性组件。这些组件主要使用的是Java技术栈,但是之前有一大部分同事,从事的是C++技术栈,所以整理一下C++、Java的一些区别。一、内存管理内存资源总原创 2021-02-22 23:33:27 · 254 阅读 · 1 评论 -
Java线程池
J.U.C源码第一章 Java线程池Java线程池J.U.C源码前言一、线程池作用二、ThreadPoolExecutor1.继承关系2.运行状态三、总结前言在Java后端程序开发的过程中,经常使用线程池技术来处理前端web并发请求,或者后端多个处理任务等。Java sdk中自带的ThreadPoolExecutor就是自带的线程池。一、线程池作用降低资源消耗通过池化技术重复利用已经创建的线程,降低线程创建和销毁造成的损耗。提高响应速度任务到达时,无需等待线程创建即可立即执行。提原创 2021-02-18 20:09:47 · 192 阅读 · 0 评论 -
单例模式实现
单例模式对比1.饿汉试单例2.懒汉试单例3.线程安全单例4.双重校验线程安全单例5.内部类单例6.枚举单例1.饿汉试单例public class EagerInitializedSingleton { private EagerInitializedSingleton() {} private static EagerInitializedSingleton instance = new EagerInitializedSingleton(); public static Ea原创 2021-01-06 19:40:49 · 209 阅读 · 0 评论 -
Java并发编程总结
Java并发编程总结背景并发编程理论可见性、原子性、有序性Java内存模型互斥锁用“等待-通知”机制优化循环等待Java线程并发工具类并发设计模式背景互联网的快速发展,Java开发的过程或多或少会需要进行并发编程,也会遇到一些并发编程带来的各种bug。下面从并发编程的理论、并发工具类、并发设计模式、并发模型案例,记录一下自己的学习历程。并发编程理论可见性、原子性、有序性并发编程的来源于缓存导致的可见性问题,线程切换带来的原子性问题,编译优化带来的有序性问题,也就是并发编程需要遵循的三个原则。可原创 2021-01-05 11:49:31 · 215 阅读 · 0 评论