- 博客(25)
- 资源 (2)
- 收藏
- 关注
原创 数据源导致整个程序卡死的问题
上周末,客服突然在群里说整个系统不可用了,当时看到这个消息,心里慌的一批。找到运维,通过jmap 命令导出当前的dump文件,并且通过jstack 导出当前的堆栈信息,然后就是艰辛的数据分析与代码跟踪路径了。下面是我的心路历程以及思路。拿到对应的线程的堆栈信息,发现所有的tomcat 线程都是阻塞在德鲁伊的takeLast上面。"http-nio-8080-exec-3" #31 daemon prio=5 os_prio=0 tid=0x000000001bc92000 nid=0x57b4 w
2021-08-31 16:53:09 1847
原创 记一次 maven resource 对文件自动编码导致文件不可用的问题
记一次 maven resource导致的问题在最近一次对接中,由于对方采用了秘钥进行加解密,于是将公钥放在了项目中,但是在进行单元测试的时候一直提示java.security.InvalidKeyException: IOException: DerInputStream.getLength(): lengthTag=111, too big.而对应的代码调用其实也是很简单的,代码如下public static void target(int i) { new Exception
2020-12-29 19:20:10 568
原创 windows 环境下Paths.get导致的问题
windows 环境下Paths的问题一般操作一般操作导致的结果一般操作说明正常的操作正常操作说明一般操作public static void main(String[] args) throws Exception { try{ String path = Test.class.getClassLoader().getResource("").getPath(); String realPath = path = path+"key/p
2020-12-29 19:02:02 2850 1
原创 15_springmvc
再说springmvc的时候,我觉得有必要提一下servlet中filter,listener以及servlet都对应的有初始化方法。那么他们的执行顺序是怎样的呢?在servlet容器的启动过程中,首先会优先调用listenner的contextInitialized方法。然后调用filter的init方法。当容器启动完成后。如果有请求进来,会对第一次请求调用对应的servlet的初始化方法,...
2019-09-25 16:24:55 99
原创 14_spring事务
在spring中开启事务可以通过在xml中配置以及使用注解的方式,我们下面按照xml配置的方式进行讲解。我们来回顾一下spring aop实现的过程1:所有的bean在初始化之后会调用后置处理器的postProcessAfterInitialization2: 查找合适的增强器3:根据查找到的增强器为当前的类实现代理(jdk或者cglib)。其中会将advisor的advice进行...
2019-09-24 08:45:30 134
原创 13_pageHelper在mybatis的分析
如果我们要在mybatis中使用PageHelper,我们第一步需要将PageHelper配置到mybatis的配置中 <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <proper...
2019-09-11 17:38:50 481
原创 12_Spring整合Mybatis源码
在我们打算在spring中使用mybatis的时候,一般需要在配置文件配置如下面的两个beanMapperScannerConfigurer bean 负责扫描对应的dao文件类,生成对应的代理。所以需要配置对应的dao文件的路径。SqlSessionFactoryBean 解析映射文件。所以需要配置对应的映射文件所在路径。 <bean id="sqlSessionFact...
2019-09-11 16:25:16 367
原创 11_AOP原理
在spring中。Aop是其一大特色。要想开启spring的aop功能,可以通过在xml中配置 <aop:aspectj-autoporxy/> 开启注解,然后定义对应的切面,切点来完成。同样也可以通过@EnableAspectJAutoProxy注解来完成开启。在分析之前我们首先通过一个例子 @Configuration @ComponentS...
2019-09-03 18:43:44 203
原创 10_finishBeanFactoryInitialization
finishBeanFactoryInitialization 的作用就是初始化剩余的所有单实例bean。除了一些需要提前初始化的类。比如前面实现了BeanDefinitionRegistryPostProcessor(在invokeBeanFactoryPostProcessors方法的时候)。通过beanFactory.getBean提前获取的。最后的都是在该方法中完成创建。 pr...
2019-08-26 17:19:48 179
原创 9_registerBeanPostProcessors
进入PostProcessorRegistrationDelegate的registerBeanPostProcessors其实这里边主要做的逻辑就是获取所有的处理器,然后根据是否实现PriorityOrdered,Ordered接口进行排序后依次加入到beanFactory的beanPostProcessors属性中。后面使用可以快速取出。再加入的时候有个小细节需要注意if (beanP...
2019-08-23 09:23:15 130
原创 8_invokeBeanFactoryPostProcessors
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());进入到对应的方法中 public static void invokeBeanFactoryPostProcessors( ...
2019-08-22 16:44:12 122
原创 7_invokeBeanFactoryPostProcessors方法讲解前的一些描述
invokeBeanFactoryPostProcessors方法是一个很好的扩展点。在需要进行统一组件扫描的情境下,通过实现BeanDefinitionRegistryPostProcessor该接口,复写其中的postProcessBeanDefinitionRegistry方法,可以很方便的去做响应的逻辑处理,如dubbo的service扫描。以及mybatis的Mapper 扫描。dubb...
2019-08-22 14:32:57 289
原创 6_prepareBeanFactory方法分析
前面已经分析了refresh函数中的obtainFreshBeanFactory方法,在该方法中,如果是通过ClassPathXmlApplication的话,会在这里边进行beanFactory的创建以及xml中的bean的解析与注册。下面继续分析prepareBeanFactory方法.主要是对beanFactory进行相关的参数设置,包括classLoader,expressionResol...
2019-08-22 13:35:21 220
原创 5_注解注册bean
在spring中如果想通过扫描注解的方式注册bean的话,可以通过在xml配置如下代码 <context:component-scan base-package="com.test.xml"/> 那么我们来分析一下componet-scan标签做了什么动作。按照我们之前的知识可以发现这个标签不属于默认标签的声明空间。所以会调用parseCustomer进行自定义标...
2019-08-22 11:18:06 145
原创 4_自定义标签的解析
先进性一个简单的自定义标签的例子首先在META-INF下创建文件spring.handlers(名字和路径固定)在其中添加 http\://www.test.com/schema/tags/urlMap=com.test.common.security.sdk.spring.handler.UrlMapNamespaceSupport 这一步是为了向s...
2019-08-22 09:10:38 234
原创 3_默认标签解析
private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { //import标签 if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { ...
2019-08-21 17:42:37 125
原创 2_XML形式bean的解析
在Spring中,注册一个bean分为两个方式,一个是通过注解扫描的方式,一个是通过xml的方式。下面我们就针对Spring的xml方式注册解析bean的过程进行分析通过跟踪代码进入AbstractApplicationContext类refresh方法在refresh方法中调用了obtainFreshBeanFactory();上篇文章提到过该类。该类是用来获取对应的beanFactor...
2019-08-21 16:52:30 213
原创 Spring源码分析(一)
在进行spring调用获取bean的时候,我们经常通过如下方式获取到一个对应的bean ApplicationContext applicationnContext = new ClassPathXmlApplicationContext("context.xml"); String []beanNames =((ClassPathXmlApplicationContext) a...
2019-08-21 14:42:24 374
原创 sychronized的概述
Java编程语言提供了多种用于线程间通信的机制,这些方法中最基础的就是同步(synchronization),他是使用监视器实现的,Java中每个对象都与一个线程可以锁定或解锁的监视器相关联,在任何时刻,只有一个线程可以持有某个监视器上的锁。线程t可以多次锁定某个特定的监视器,而每个解锁操作都会抵消一次锁定操作的效果。synchronized语句计算的是对对象的应用。然后他试图执行在该对象监视器...
2018-09-28 10:52:37 150
原创 类的初始化阶段
以下情况发生时,会触发类的初始化1:创建了类的实例2:该类的static方法会被调用3:static域被赋值4:static域被调用(当前域不是一个常量变量)[常量变量:用常量表达式初始化的简单类型或String类型的final变量,所谓常量表达式就是指简单类型值货String对象的表达式]5:子类被初始化的时候,父类也需要被初始化。ps:对static域的引用只会导致实际...
2018-09-11 11:01:41 315
原创 java类型转换
类型转换Java中的类型转换可以分为13种,1 标识转换 是最简单的就是同种类型之间的转换。2 拓展简单类型转换 拓展简单类型转换涉及到基本数据类型,比如byte转换为short,int,long,float,double;short转换为int,long,float,double;int转换为long,float,double.以及long转换为float,double.其中针对以下几种情况数字...
2018-07-02 15:27:03 7418 2
原创 java类型和范围值
在java类型中存在三种类型,分别为:简单类型,引用类型以及空类型。同样对应的有三种数据值,简单值,引用值以及null。其中null是一种特殊的类型。由于null的类型没有名字,所以不能声明一个变量是空类型的,同样不能将变量类型转化为空类型。数字类型包括整数类型和浮点数类型。其中整数类型包括byte,short,int,long.他们分别是8,16,32,64位有符号二进制补码表示的整数。char...
2018-06-28 10:58:45 357
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人