JAVA系列课程
Hollis,阿里巴巴技术专家《Java工程师成神之路》系列文章作者,热衷于分享计算机编程相关技术,博文全网阅读量上千万。
2023年10月29日
在Spring框架中,FactoryBean是一个特殊的Bean,它的主要目的是产生其他Bean。本文将深入探讨FactoryBean的工作原理,结合源码分析,并提供三个具体的使用场景和示例。
一、...
2023年10月29日
在Spring框架中,Bean的作用域决定了其生命周期和可见性。本文将深入探讨Spring支持的各种作用域,其属性,如何创建,以及与之相关的Spring源代码。
一、单例作用域...
2023年10月29日
Spring框架的事件驱动编程模型为组件间的松耦合通信提供了强大的支持。本文将深入探讨其实现原理,核心源码,并结合具体例子进行说明。
一、Spring事件的核心组件
Spring的事件模型基于以下几个核心组件:
ApplicationEvent:...
2023年10月28日
Spring框架是Java开发领域中广泛使用的框架,主要负责简化企业级应用程序的开发。Spring框架的核心是Bean容器,它负责管理应用程序的对象。在本文中,我们将深入探讨Spring中Bean的生命周期、类型,以及如何被创建、管理和销毁。
一、Bean的定义与类型
定义:在Spring中,Bean是由Spring...
2023年10月27日
Zuul官网关于文件上传的说明
小文件可以正常工作,大文件需要通过/zuul/*这个替代路径来绕过spring(避免进行多部分处理)。另外大文件上传需要提高超时设置。
关于zuul的dispatcherServlet和zuulServlet,一般情况下zuulServlet被嵌入到Dispatch机制中,由DispatcherServlet分派处理,这样可以控制路由,并缓冲请求。如果需要绕过multipart处理,在不缓冲请求的情况下通过zuul,zuulServlet也可以装载在DIspatcher之外,让请求绕过DispatcherServlet。
DispatcherServlet为了方便后续处理流程使用,会将multipart/form请求根据RFC1867规则进行统一分析处理,并且返回MultipartHttpServletRequest实例,通过它可获取file和其他参数,这个过程会影响性能。
处理multipart/form请求的核心代码:
具体配置
一、zuul路由配置
serviceId映射:
zuul:...
2023年10月27日
一、服务间调用流程
微服务互相调用过程中,为了防止某个微服务的故障消耗掉整个系统的连接资源,在服务调用过程中在调用方增加对被调用微服务的熔断逻辑——通过hystrix框架来实现。
二、Hystrix线程池相关配置
默认配置:
#核心线程数
hystrix.threadpool.default.coreSize:10
#最大队列长度,-1表示hystrix不会向队列中存放任务
hystrix.threadpool.default.maxQueueSize:-1
#排队线程数量阈值,超过将会拒绝请求
hystrix.threadpool.default.queueSizeRejectionThreshold:5
如果maxQueueSize为-1,则该选项不起作用
三、测试默认配置下的并发情况
调用方代码(消费者服务):
创建100个线程,通过channelFeignClient调用服务提供方,看是否回提示异常。
服务提供方代码(生产者服务):
测试结果:
100个线程,成功10次,其余抛出异常
结果分析:核心线程数的大小为10个,队列最大值为-1,因此,超多10个请求的其他90个请求全部被拒绝,走hystrix的回退逻辑。
四、测试修改配置后的并发情况
增大队列数和队列拒绝阈值
测试结果:
结果分析:全部成功
2023年10月26日
一、什么是MybatisMybatis是一个对象关系映射持久型框架,mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射以java对象返回。
二、Mybatis工作流程
mybatis工作流程:加载mybatis全局配置,解析配置文件,基于xml配置生成Configuration和一个个MapperStatement(对应crud标签),SqlSessionFactoryBuilder通过Configuration生成SqlSessionFatory对象,SqlSessionFactory生成SqlSeesion对象,SqlSession对象完成和数据的交互
程序通过SqlSession调用找到对应MapperStatement对象,然后通过Executor将MapperStatement对象进行解析,sql参数转化、sql动态拼接、生成jdbc...
2023年10月26日
Java位运算是一种高效的运算方式,无论是在嵌入式编程还是在底层代码中应用非常广泛。Java位运算有7个,分别是~(取反)、&(与)、|(或)、^(异或)、>>(右移)、<<(左移)、>>>(无符号右移)
~(取反)取反运算位运算
int...