- 博客(39)
- 资源 (2)
- 收藏
- 关注

原创 Netty的编程模型
网络编程模型传统的BIO网络编程模型(线程池)Netty的网络编程模型三级目录传统的BIO网络编程模型(线程池)传统的网络编程模型,以Tomcat为代表,服务端的ServerSocketChannel个数取决于线程池中线程的数量,如图所示。这种编程模型,客户端的连接数受限于线程池中线程的数量。Netty的网络编程模型三级目录...
2020-09-08 19:27:34
363

原创 Netty官方为什么说自己是基于事件驱动的异步编程
Netty的异步编程前言一、先前阅读Netty源码的心得1、NioEventLoop的轮询调度二进制运算实现2、Netty的线程模型3、Netty的异步编程二、Netty的事件驱动1、什么是事件2、Netty中的动作与事件前言之前有阅读过Netty源码,当再次在百度搜索Netty时候,跳出Netty官方地址官方网站。当读到Netty is an asynchronous event-driven network application frameworkfor rapid development
2020-07-16 17:57:07
991
原创 数据统一发送代码改造优化
目录这篇文章的目的在于,详细介绍,如何通过代码重构,达到代码简洁,语义可读性强的目的,穿插设计类、接口、抽象类、以及相关命名的思想,以期能够生动形象的揭示出面向对象的思想。先来看设计混乱,功能区分不明确的代码:/** * 数据发送接口 */public interface IntfDataApi { /** 版本号:1.0 */ String VERSION_1_0 = "1.0"; /** * 获取服务码 */ String getServiceCode(); /**
2021-01-25 11:18:26
465
原创 Spring中的事物源码解析
目录前言xml方式注解的方式代理对象事物执行前言在Spring中,使用事物的方式基本上都是通过声明@Transactional来完成的。xml方式在xml的IOC容器中<tx:annotation-driven/>开启Spring的声明式事物支持。Spring事物xml标签的解析由TxNamespaceHandler来处理。<tx:annotation-driven/>该标签的解析由AnnotationDrivenBeanDefinitionParser来解析处理。Sp
2020-12-09 17:52:47
360
原创 Runtime.getRuntime().exec执行jar包修改配置文件并替换问题记录
微服务结构:子工程依赖父工程,父工程向子工程提供统一配置及公用类,多个子工程依赖同一个父工程。角色定位:这个父工程,是整个应用系统的基础设施。这个基础设施,不是简单的抽取微服务的配置等,还包括了对第三方的组件集成与优化,减少子工程的配置文件,最好达到子工程只需要提供多种环境的yml文件即可而不需要额外的配置文件等。结构依赖图示:为了达到减少子工程的配置文件目的,把子工程所需要的scm.properties配置文件移到父工程中。这带来了一个问题,每个子工程的scm.properties文件
2020-11-27 11:55:42
1942
原创 SpringBoot中的Reactive编程之Web请求的建立、接收、响应
目录前言web请求连接建立客户端与服务端的连接建立激活NioSocketChannel读HttpServer已接收请求后的操作Mono流转请求派发DispatcherHandler响应请求信息前言web请求连接建立Netty的web服务端建立以后,具备了监听客户端连接的功能,在NioEventLoop的run方法中。且reactor-http-nio-1线程停留在strategy = select(curDeadlineNanos);方法中,但该线程没有阻塞。放开断点后,观察到线程reactor-h
2020-11-19 17:05:55
3262
原创 SpringBoot源码学习之@EnableConfigurationProperties原理机制
目录前言用法原理前言用法定义一个与application.yml中属性配置相对应的实体类,比如ServerProperties在ServerProperties中添加@ConfigurationProperties注解,指定prefix在@Configuration配置类中添加@EnableConfigurationProperties(ServerProperties.class)使用方式,可以透过@Bean方法中的入参或者在Spring Bean中用@Autowired注解都可以。原理
2020-11-11 10:54:32
1009
原创 SpringBoot中的Reactive编程之NettyReactor
目录前言流程创建IOC容器invokeBeanPostProcessoronRefreshfinishBeanFactoryInitializationfinishRefresh前言流程创建IOC容器先创建IOC容器,ReactiveWebServerApplicationContext。 context = createApplicationContext();invokeBeanPostProcessorConfigurationClassPostProcessor完成BeanDefin
2020-11-10 15:18:16
1299
原创 从实际项目中看SpringMVC中的IOC容器和applicationContext中的IOC容器的区别跟后果
目录前言发现问题查找问题解决问题总结前言发现问题在力资费新链路改造中,我们系统通过我司自研的RPC与外围系统要对接。我们系统作为服务消费方去引用外围系统服务提供方提供的支付服务。通过@Reference去引用服务提供方提供的服务,报空指针异常,即通过注解的方式并没有生成代理对象。查找问题从报错分析,空指针的直接原因,是没有生成代理对象。而生成代理对象的这一过程是在创建服务消费方对象的时候。重点来了,其实就是IOC容器中bean对象(本例中消费方)的生命周期。我们找到了问题的发生时机,直接双s
2020-11-04 15:49:22
388
原创 记录SpringBoot环境下内置Tomcat,基于JNDI获取DataSource方式遇到的报错
目录前言解决错误历程总结前言我司项目是使用外部Tomcat,配置DataSource获取数据源的方式有一个factory的配置为org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory。但在对项目微服务化改造的过程中报错:Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory。springboot.version: 2.3
2020-10-24 00:03:52
1190
原创 Spark源码精读一线程池之消息派发线程池
线程池消息派发器中的线程池“dispatcher-event-loop”混洗数据客户端线程池“shuffle-client”Netty的超时调度器“netty-rpc-env-timeout”Netty的RPC连接线程池“netty-rpc-connection”混洗数据服务端的线程池“shuffle-server”消息派发器中的线程池“dispatcher-event-loop”这个线程池,是用来派发Spark中Endpoint的消息的,比如OnStart,RpcMessage等。这个线程池创建的时
2020-09-25 17:41:31
666
原创 怎么将一个List<Entity>通过Lambda转化为Map<Integer,List<Integer>>结构
如何将一个List<Entity>转换成Map<Integer, List<Integer>>结构
2020-08-07 09:44:54
1740
原创 对太多的if-else校验逻辑,提供一种简洁优雅的新思路
if-else校验逻辑替代前言业务场景优化之前优化之后范式总结前言作为一位高水准的码农,我们的代码应该就像是我们自己的家一样,简洁而优雅。对代码质量有洁癖。之前有写过if多重逻辑的简化,这篇文章是在前几天,优化那一坨长长的if-else逻辑时,顺带记录跟分享的。以便为大家提供一种新的简洁if-else的思路。业务场景我们有一个实体类Example,现在业务需要我们对这个实体类中的一部分字段做一些校验,这些校验涉及一些非空校验和特殊的校验。优化之前优化之后范式总结...
2020-07-28 17:59:56
644
原创 分布式服务之Dubbo源码学习
Dubbo对Spring的扩展动态代理在消费方的意义通过XML的方式解析注册通过Annotation注解的方式解析注册Dubbo与RSF实现对比RPC最明显的特征就是可以让消费方像调用本地接口的方式那样,调用服务提供方提供的远程服务。而实现这个特征,最重要的就是通过动态代理方式。这也从侧面可以看出,动态代理在整个RPC框架的地位举足轻重。动态代理在消费方的意义我们通常在消费方引用远程服务时,通过@Reference注入对象,这个对象其实是代理对象。是在创建并实例化消费方所在的服务时,在bean的生命周
2020-06-12 18:07:07
494
原创 Spring中的设计模式之Handler模式(一)
Handler模式NamespaceHandlerNamespaceHandlerSupport(Abstract)ContextNamespaceHandler总结Spring在通过xml容器加载BeanDefinition信息的时候,用到了NamespaceHandler,这样可方便我们开发出自定义的标签。比如,Druid标签NamespaceHandlerNamespaceHandle...
2020-05-17 23:16:03
6018
原创 JDK源码学习之HashMap
HashMap源码学习HashMap类图HashMap概述HashMap实现HashMap类图HashMap概述允许null key和null valueHashMap与HashTable紧密相关,除了不是同步的,以及允许null值外。HashMap对迭代元素的顺序不保证,特别是,不保证迭代的顺序一致不变。假定Hash函数分散的元素比较合理,它会提供常数时间的get 、put操作...
2020-05-11 00:05:08
186
原创 多重判断条件IF优化
IF多重条件逻辑优化事例一:比较简单的if逻辑嵌套事例二:复杂场景的if逻辑嵌套代码抽象:递进式的条件及对应的业务处理总结含义:c1:条件1,值为truec2:条件2,值为truec3:条件3,值为true事例一:比较简单的if逻辑嵌套代码抽象:递进式的条件// 方法开始...if (c1) { if (c2) { if (c3) { // 业务逻辑 } }...
2020-05-07 17:00:36
4816
1
原创 Java源码学习之LinkedHashSet
LinkedHashSetLinkedHashSet类图LinkedHashSet概述LinkedHashSet的实现LinkedHashSet类图LinkedHashSet概述与HashSet主要不同在于,LinkedHashSet维护了一个双链表,并且还定义了迭代顺序,迭代的顺序即为插入的顺序。Note:在LinkedHashSet中,插入顺序不会受到重复插入的影响。(在插入之前,...
2020-05-06 18:15:31
139
原创 Spring中的设计模式之ApplicationEvent监听器模式(二)
Spring中的事件机制事件传播机制在Spring中的作用ApplicationEvent,ApplicationListener的关系二级目录三级目录事件传播机制在Spring中的作用ApplicationEvent事件的存在是为了,在应用完成Spring容器的初始化后,紧接着需要将容器完成初始化这一事件动作通知广播给其他事件监听器,让接受该应用事件ApplicationEvent的事件监听...
2020-05-06 16:20:19
484
原创 Spring MVC中请求到处理方法之间的处理机制
doDispatch处理机制RequestMappingHandlerMapping在MVC中扮演的角色及作用HandlerMethod在MVC中扮演的角色及作用HandlerExecutionChain在MVC中扮演的角色及作用HandlerAdapter在MVC中扮演的角色及作用【适配器模式】这部分不是处理器模式Handler /** * Process the actual disp...
2020-04-29 09:27:50
322
原创 IOC容器初始化之finishBeanFactoryInitialization
完成Spring容器中剩余的bean初始化序言preInstantiateSingletons三级目录序言之前容器中的我们自定义的实现类(…Impl)都是通过扩展的Spring,通过依赖注入初始化的(populateBean)来创建bean对象的。比如mybatis-spring定义的mapper接口或者shiro-spring中的ShiroFilterFactoryBean。现在完成对象的...
2020-04-27 11:01:11
270
原创 IOC容器初始化之创建对象的方式(六)
Spring创建bean的方式序言直接通过new对象的情形通过getBean创建对象维持Spring自身运行的核心bean序言Spring应用中创建对象的方式,一种是直接new一个对象,比如DefaultListableBeanFactory;另一种方式是通过getBean的方式反射创建对象;getBean的调用又分为几种情况,一是维持Spring自身运行的核心bean,二是扩展Spring的...
2020-04-20 17:50:17
714
原创 IOC容器初始化之spring-servlet.xml容器(二)
Spring MVC容器的初始化序言Spring容器和Spring MVC容器的不同Spring MVC 容器的初始化序言在一个web应用中,我们经常会配置两个Spring容器,一个是applicationContext.xml;另一个是spring-servlet.xmlapplicationContext.xml的初始化是由ContextLoaderListener的initWebApp...
2020-04-15 16:31:58
208
原创 IOC容器初始化之registerBeanPostProcessors(四)
registerBeanPostProcessors流程序言beanPostProcessor三级目录序言BeanFactoryPostProcessor和BeanPostProcessor的主要区别,在功能上就是对beanFactory的扩展后置处理和对一个bean的扩展后置处理。前一个常应用于对Spring的功能扩展,因为涉及到功能扩展的类转换成BeanDefinition并注册,比如my...
2020-04-12 13:03:26
201
原创 IOC容器初始化之invokeBeanFactoryPostProcessor学习(三)
invokeBeanFactoryPostProcessor流程序言二级目录三级目录序言二级目录三级目录
2020-04-06 11:57:54
232
原创 IOC容器初始化之创建BeanFactory时的loadBeanDefinition【XML方式】(二)
BeanDefinitionReader来读取beanDefinition信息。
2020-04-03 15:49:28
253
原创 IOC容器初始化之学习抽象类AbstractApplicationContext(一)
Spring整个应用的骨架流程就是AbstractApplicationContext中的refresh,Spring中的各个功能都是围绕这个refresh向外扩展的。我们知道,自从Servlet03.0去web.xml配置以来,启动Spring应用的方式,又新增了一种通过Java Config来实现。因此,Spring为了实现这种无XM了的启动,又新增了另一种实现方式,AnnotationCo...
2020-04-02 23:15:32
306
原创 Spring源码学习之Spring Web 应用的启动流程(一)
目录0. ContextLoaderListener在Spring Web应用中的作用1. Web.xml方式启动Spring Web应用2. Servlet3.0编码方式启动Spring Web应用[Spring 3.1+]功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPant...
2020-03-22 19:28:50
238
原创 Java集合框架之HashMap源码分析(一):从hash方法演进之路看代码优化
1.7.0.17环境中默认构造HashMap中的时候会创建底层的数据结构,容量为16,同时计算出扩容需要的阈值12;而80年7月1日环境默认构造HashMap中的时候不创建底层的数据结构。从哈希方法看linux下说的:“有品质的代码,重写代码,完美覆盖特例”。jdk1.7.0.17的哈希方法:/** * Retrieve object hash code and appli...
2018-06-26 18:17:04
157
原创 JDK集合框架之ArrayList源码解析
Java中为什么要有ArrayList这个集合类?ArrayList底层的数据结构是采用数组来实现的,我们都知道数组这种结构的优点:访问数组中的元素所耗费的时间都是常数时间。但是还有一个大的缺点就是数组是定长的,也就是我们一旦创建了数组,就必须指定它的存储空间大小,而它的存储空间大小一旦指定就不会再发生改变,显然,这个缺点制约了数组在很多场合下的应用,因此,在保证常数时间访问的同时,又要实现可变长...
2018-06-19 08:13:08
247
原创 Extjs4.0日历插件与项目整合的详细介绍(二)
之前已经细说过日历插件的其中一部分,接下来会对view目录下的文件进行详细的介绍,该目录下的文件多数是控制日历插件的展示的,比如显示到日历表上的div层,禁止可拖拽功能以及按照国内日历的习惯,一周从周一开始而不是周天等。1. AbstractCalendar.js该文件主要是为其他的view提供基础服务的抽象类。 - 控制表头中的一周从周一开始
2016-10-11 00:56:12
3598
原创 Extjs4.0日历插件与项目整合的详细介绍
日历插件的calendar目录的src子目录结构介绍 data目录是日历插件的数据集,示例中的数据集分为两类: 1)calendar日历 - CalendarMappings.js:给日历记录提供字段定义以便开发者可以覆盖,比如你的需求需要一些新的字段就可以直接按照它的格式在这继续定义,之所以将字段定义从model中分离出来应该是为了解耦和,方便开发者不至于每次在添加新
2016-10-10 14:41:46
4041
原创 maven项目中引入外部数据库链接文件db.properties中的一个bug
这是我练习maven项目中发现的,先贴源码driver=com.mysql.jdbc.Driverurl=jdbc:mysql:///etoakusername=rootpassword=root然后在junit测试单元中,链接数据库时发现,报了java.sql.SqlException九月 02, 2016 9:57:18 下午 org.springframework.beans.
2016-09-02 21:48:40
2997
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人