自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 java中的SM4算法的PKCS5和pkcs7补位实际上是一样的

SM4算法中PKCS5补位和PKCS7补位结果

2024-04-12 16:30:32 1008

原创 生产服务间隔6分钟就会有超1S交易的问题排查解决

但是,还是存在超1s的交易,通过观察单台应用发现每隔6分钟大约就会有超时的,由于我们使用的是mina框架,处理请求的线程设置是150个,使用arthas的thread命令抓取线程阻塞,没有抓到(事后发现是因为阻塞时间太短,手动敲命令后很难抓到,而且间隔6分钟大概才阻塞)。首先,排除是否是有不合理的定时任务,每次6分钟执行,同时执行时可能是锁表等操作引起阻塞,通过查看定时配置和定时的代码,发现确实有俩任务,其中有个任务涉及到加锁操作,但是定时时间是每天执行一次,所以排除掉。其次,查看是否是GC引起的停顿。

2024-02-27 14:43:48 437

原创 查看公私钥证书的过期时间

#在证书文件目录下执行下面命令 查询名称为 cer格式的文件,取 name 属性值作为 openssl命令的参数find ./ -name "*.cer" |xargs -i openssl x509 -in {} -noout -dates#如果证书文件少,可以直接查看这个证书的时间:openssl x509 -in acp_prod_verify.cer -noout -dates 查看私钥证书的过期时间:我们可以先从私钥证书中提取出公钥证书,然后查看公钥证书的过期时间# 从pf.

2022-03-11 11:05:23 5330

原创 myBatis3.1.0升级遇到的一个BUG

mybatis3.1升级可能遇到的BUG

2022-03-10 18:24:42 951

原创 spring源码阅读--我们的第一个demo

如何写一个我们的demo?首先,新建一个模块module,使用maven构建。pom文件如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema...

2020-01-23 09:56:51 402

原创 Java设计原则及设计模式个人总结

七大设计原则1.开闭原则,开闭原则是总纲,我们做系统首先需要满足开闭原则。软件实体应对扩展开放,而对修改关闭。2.单一职责原则,用于控制类的粒度大小,就是我们重构时,将一个复杂的类拆分为多个类。尽可能地将一个类职责单一化。3.接口隔离原则,使用多个专门的接口,而不使用单 一的总接口,即客户端不应该依赖那些它不需要的接口。这个是关于接口定义时的指导方针,可以对比类的单一职责原则。就是要求将复...

2020-01-22 21:48:17 200

原创 spring源码阅读环境的搭建问题记录

首先,修改maven镜像 repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} maven { url "http://repo.springsource.org/plugins-release" } }不修改的化会出现下面问题:Could not resol...

2020-01-21 20:13:37 680

原创 Java8新特性---四大类型函数式接口

lambda表达式:将一段代码进行赋值,或入参。实质:佚名内部类Runnable接口就是一个函数式接口。常用的函数式接口:消费型接口 BiConsumer:俩个入参,无返回值Consumer :一个入参,无返回值package java.util.function;import java.util.Objects;@FunctionalInterfacepublic inte...

2020-01-14 22:45:57 627

原创 MyBatis源码的学习(23)---阶段性总结

按功能模块分:sql解析阶段sql执行阶段先看解析阶段@BeforeAllstatic void initDatabase() throws Exception { try (Reader reader = Resources.getResourceAsReader("mybatis-config.xml")) { sqlSessionFactory = new SqlS...

2020-01-12 19:17:36 177

原创 springBoot学习---从SSM的动态数据源到SpringBoot的动态数据源的实现方案二

和方案一区别:spring: datasource: primary: url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8 username: zhangzx password: 123 driverClassName: com.mysql.cj.jdbc.Dr...

2020-01-12 11:53:47 149

原创 springBoot学习---从SSM的动态数据源到SpringBoot的动态数据源的实现方案一

一共有俩中实现方案,最近方案一已经调通,记录如下:难点:如何将动态数据源的注入到sqlSessionFactory中。方案一的实现数据源的注入,依赖于注解@MapperScan,在这个注解中有下面的属性值,我们人为生成,然后注入进去。sqlSessionFactoryRef方案二的实现方式,学习我们的通用Mapper插件,采用实现接口ImportBeanDefinition...

2020-01-11 14:17:20 170

原创 MyBatis源码的学习(22)---关于#和$的区别,简单类型$中只能用value吗??

最近在整理mybatis中关于#和$的区别的时候,其中看到网上有一条是:${}接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,${}中只能写成value。#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,#{}中可以写成value或其它名称。上面加黑的部分,经过测试,不管是$还是#,单个参数...

2020-01-08 11:04:44 485

原创 springBoot整合通用Mapper插件的源码简单解读

本篇主要是简单讲解,通用Mapper的实现原理,不是整合教程。每次学习一个新的框架/插件的时候,我们一开始都是按照官方示例写代码,达到了会用的目的。等用一段时候之后,就应该学习源码,学习它是如何设计的,为啥,简简单单的一个配置就可以完成很多事情。示例代码来自插件自带的springBoot整合示例代码: //简单的依赖,一个starter,一个h2内存数据库 <dep...

2020-01-07 10:53:47 747

原创 MyBatis源码的学习(21)---mybatis中当参数只有一个且是自定义对象类型时提示reflection.ReflectionException: There is no getter

Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'user' in 'class learn.User'### Cause: org.apache.ibatis.reflection.Reflectio...

2020-01-06 20:36:56 465

原创 SpringBoot整合mybatis-plus的使用---提示未绑定默认接口中的抽象方法的解决和源码分析

示例代码,仿照官网写的。在自己写的demo中,遇到一个问题:提示方法绑定不了org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.itw.zhangzx.mybatisPlus.mapper.UserMapper.selectList解决方法:在我们继承的Base...

2020-01-05 21:04:05 1022

原创 SpringBoot源码阅读---整合mybatis

依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</versi...

2020-01-05 16:48:10 298

原创 MyBatis源码的学习(20)---如何从jdbc到mybatis?

mybatis源码解读,基本简单的流程已经解析的差不多了,这里做个总结:从架构的角度,分析下如何把jdbc封装成myBatis的。原生的jdbc代码步骤:1.获取连接(连接信息等可以从配置文件中获取)2.sql3.创建statement对象4.设置参数5.执行statement6.结果集映射为java类型7.释放资源从架构的角度看问题:首先,连接信息需要的驱...

2020-01-04 20:42:35 207

原创 SpringBoot源码阅读--自定义Starter

新建一个maven项目,引入相关依赖。然后在META-INF文件夹下新建文件 spring.factories。配置我们的自动配置类<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or...

2020-01-04 20:24:21 157

原创 MyBatis源码的学习(19)---如何将jdbc的返回结果resultSet处理为我们想要的java类型

处理结果集的逻辑:ResultSetHandler---->TypeHandler @Override public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boun...

2020-01-04 14:40:03 1096

原创 git使用的常用命令

从远程仓库下载代码到本地:git clone git@github.com:itwzhangzx02/mybatis-3.gitgit fetch git@github.com:itwzhangzx02/mybatis-3.gitpull = fetch+merge (会多一个合并的记录出来)pull = fetch+rebase(不会多一个合并的记录出来)本地做了...

2020-01-02 09:16:22 143

原创 SpringBoot源码阅读--配置文件详解

下面是官网的配置的优先级:(数字越小的,优先级越高)Spring Boot设计了一个非常特别的PropertySource顺序,以允许对属性值进行合理的覆盖,属性会以如下的顺序进行设值:home目录下的devtools全局设置属性(~/.spring-boot-devtools.properties,如果devtools激活)。 测试用例上的@TestPropertySource注解。...

2019-12-31 15:40:42 291

原创 MyBatis源码的学习(18)---如何对statement对象进行参数赋值操作的?

前面说过,我们建立连接,创建statement对象,接下来我们看看如何进行赋值操作private Statement prepareStatement(StatementHandler handler, Log statementLog) throws SQLException { Statement stmt; Connection connection = getConn...

2019-12-31 10:48:21 891

原创 MyBatis源码的学习(17)---如何使用JDK动态代理进行日志记录的织入

在学习Spring的时候,我们经常说到AOP。然后举例的时候,经常会说,比如日志切面的切入,将日志功能织入到主体功能中,进行日志记录。今天,我们看一下MyBatis中使用动态代理织入记录日志的功能。// SimpleExecutor类 @Override public <E> List<E> doQuery(MappedStatement ms, Object ...

2019-12-31 10:29:52 263

原创 MyBatis源码的学习(16)---拦截器为何不能拦截Executor中6个参数的query方法

今天,配置了一个MyBatis拦截器如下:package learn.interceptors;import org.apache.ibatis.cache.CacheKey;import org.apache.ibatis.executor.Executor;import org.apache.ibatis.mapping.BoundSql;import org.apache.i...

2019-12-30 15:41:42 2497 1

原创 MyBatis源码的学习(15)---sqlSession.selectList方法

sqlSession一共俩个实现类,我们这里分析默认的DefaultSqlSession类public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) { try { //ms对象代表我们的xml中的一条sql。例如:<select...

2019-12-29 22:18:09 7224 1

原创 MyBatis源码的学习(14)---SqlSource和SqlNode

sqlSource接口中最底层的,最基础的是: StaticSqlSource,里面sql字段用于存放解析好的sql,比如将'#{}'替换为“?”占位符BoundSql getBoundSql(Object parameterObject);RawSqlSource--.>StaticSqlSource-- >sql常规的解析Mapper.xml的时候,我们创建S...

2019-12-29 10:38:04 713

原创 jvm的性能调优

常规的参数设置:-Xms2048m -Xmx2048m -Xmm700m按照jvm规范,一般年轻代:老年代是 1:2年轻代中s:e为1:8.尽量将堆大小设置为固定值,不要使用浮动扩容。比如:-Xms2048m -Xmx4096m还有就是,堆大小不是越大越好,如果堆内存太大,到时候一次full gc可能需要好久才触发一次,这样每次full gc时将会造成很大的停顿时间。...

2019-12-27 23:26:13 336

原创 MyBatis源码的学习(13)---Mybatis是如何构建sql的?

统一的一个接口:sqlSource俩个实现类:1.RawSqlSource 解析:select * from user where name = #{name}属性字段 sqlSource --StaticSqlSource类型的StaticSqlSource进行将'#{}'替换为 ?占位符StaticSqlSource中的属性字段sql用于存储解析后的sql select ...

2019-12-27 21:50:40 412

原创 MyBatis源码的学习(12)---Mybatis是如何从Mapper.xml中的select到sqlSession.selectList的?

这个问题:估计大家都知道是动态代理。可是除了动态代理这之间还有哪些设计模式呢? //3、获取mapper UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //4、执行数据库操作,并处理结果集 return userMapper.selectUser("10");先看我们的getM...

2019-12-26 22:54:19 621

原创 SpringBoot源码阅读--编写我们的HelloWorld

新建一个 module在我们的项目根目录下:一直下一步就可以了。建好的module后,修改pom文件:(这个可以参考官网,我这按官网操作的)<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w...

2019-12-23 22:42:18 130

原创 SpringBoot源码阅读--环境搭建

先在github上找到springBoot的仓库,如果直接clone或者先fork到自己的github,再执行clone都会失败。最后,折中的方法,直接下载源码包.zip文件,然后导入本地。直接到releases中找一个版本的,然后下载.zip文件。然后解压到你的任意位置。再用idea打开pom文件前,先记得将镜像地址配好了,配成阿里云的。配置你要使用的maven的配置文件,添加镜...

2019-12-23 16:26:11 530

原创 JAVA并发编程--ForkJoin的使用

思想:拆分归并1.任务拆分 fork()2.结果归并 join()package learn.ForkJoin;import java.util.concurrent.ForkJoinPool;public class ForkJoinTest { public static void main(String[] args) { test(); } ...

2019-12-22 16:30:27 171

原创 单例模式singleton--你真的会用吗?

作为23中设计模式中最简单的一种模式,网传有8中写法。我想说的是:会的多不如学的精,今天看了一个公众号推送的文章,上面直接说双重检查机制的单例是线程安全的。首先,从大类上分:饿汉和懒汉。就是要不要延迟实例化的问题?如果,你项目中的有配置类,构造类等,反正你迟早要用到,为了不出错,直接饿汉式就好了。写代码首先是安全,其次是性能,千万别学了点花把式就看不起基础的拳脚。package le...

2019-12-21 16:14:59 91

原创 MyBatis源码的学习(11)---Mybatis二级缓存默认LRU算法的分析

首先说结论,百度Mybatis的lru算法时,都说的是,活跃的节点放到了头部,如果容量满了,会先剔除掉尾节点。这个说法是不对的,在MyBatis中的lruCache中,不活跃的节点是头节点,这个节点会被剔除掉,每次我们的get和put操作时,会把活跃的节点放到尾部。为了方便研究问题,我们先修改源码,将LruCache的容量改小点:size改为5.public class LruCache...

2019-12-21 13:00:36 605

原创 Java的Stream流编程的排序sorted方法里参数o1,o2分别代表什么?

先说结论:在sorted方法中,o1是最后面的元素,o2是倒数第二个元素,以此类推,流是处理元素是从后面开始取值。package com.br.itwzhangzx02.learn;import org.junit.Test;import java.util.ArrayList;import java.util.List;import com.br.itwzhangzx02...

2019-12-21 10:29:24 9111 1

原创 MyBatis源码的学习(8)---Executor执行器的的创建

/*** 来自DefaultSqlSessionFactory类。*/@Override public SqlSession openSession(boolean autoCommit) { return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, autoCommit...

2019-12-19 19:12:26 170

原创 MyBatis源码的学习(10)---高版本的Mapper.XML中为何不能使用#{0},#{1}操作?

public void updateName(@Param("name") String name , @Param("id")String id);XML中获取参数: <update id="updateName" parameterType="String" > update u_user set username = #{name} where userco...

2019-12-18 20:08:01 824

原创 MyBatis源码的学习(9)---映射器mappers的的XML解析

来自官方文档解析的方式如下:<!-- 使用相对于类路径的资源引用 --><mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper.xml"/> <...

2019-12-18 09:23:47 204

原创 Maven打包时,跳过单元测试

今天,打包的时候,由于运行测试用例导致打包失败。后来查资料后,已解决,这里记录下。黑体部分,跳过测试环节<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <con...

2019-12-17 21:31:52 177

原创 MyBatis源码的学习(7)---MappedStatement的的创建

SqlSessionFactoryBuilder--->XMLConfigBuilder---> XMLMapperBuilder---(桥梁)MapperBuilderAssistant--->XMLStatementBuilder(parseStatementNode方法)--(桥梁)MapperBuilderAssistant(addMappedStatemen...

2019-12-16 12:06:08 543

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除