框架
lkforce
这个作者很懒,什么都没留下…
展开
-
MyBatis源码学习(七)——从源码看MyBatis如何使用缓存
目录前言和总纲一,创建SqlSession二,创建CacheKey三,执行sql四,sqlSession的提交先上总结:1,创建sqlSession阶段。创建Executor执行器,其中有两个参数,localCache和localOutputParameterCache,localCache是一级缓存,localOutputParameterCache用于缓存存储过程的OUT和INOUT参数。Executor执行器首先会被CachingExecutor装饰,然后又被插件列表.原创 2020-12-27 22:56:20 · 1235 阅读 · 0 评论 -
MyBatis中单一简单参数判断null的方法
比如有这样一个方法:List<Order> selectListById(Integer id);只有一个数字类型的参数,而且id参数有可能是null。如果在xml文件里这样写:<select id="selectListById" resultMap="baseResultMap" parameterType="java.lang.Integer"> select * from `order` a where a.status=0原创 2020-12-01 15:04:48 · 5315 阅读 · 1 评论 -
手动调用指定Dubbo接口(三)----GenericService篇
我写了个方法,可以给方法传递指定的Dubbo接口名,方法名,参数值,方法来调用我们指定的Dubbo接口,并返回结果。这次用的是Dubbo的GenericService。示例代码:@Controller@RequestMapping("/test")public class TestController { /** * @param interfaceName Dubbo接口名 * @param methodName 方法名 * @para.原创 2020-06-23 18:40:11 · 3417 阅读 · 0 评论 -
手动调用指定Dubbo接口(二)----Reference篇
我写了个方法,可以给方法传递指定的Dubbo接口名,方法名,参数值,方法来调用我们指定的Dubbo接口,并返回结果。在SpringBoot中使用@Reference注解标识的Dubbo接口,比如:@ReferenceOrderService orderService;这种接口的动态代理没有被放到Spring的上下文中,而是放在了Dubbo的处理类AnnotationBean中。这种情况下使用WebApplicationContext wac = ContextLoader.g.原创 2020-06-23 18:34:50 · 3661 阅读 · 1 评论 -
Dubbo的GenericService简介和基本使用
简介GenericService是Dubbo提供的泛化接口,用来进行泛化调用。GenericService接口只有一个方法:Object $invoke(String var1, String[] var2, Object[] var3) throws GenericException;第一个参数是方法名。第二个参数是一个字符串数组,这是接口方法每个参数类型的全路径。第三个参数是Object数组,是传给方法的具体参数列表。Dubbo服务的提供者和消费者都可以使用这个接...原创 2020-06-23 18:06:45 · 9333 阅读 · 0 评论 -
Spring中InitializingBean和SmartInitializingSingleton的区别
目录一,InitializingBean简介:二,SmartInitializingSingleton简介三,InitializingBean和SmartInitializingSingleton的区别四,从源码观察InitializingBean和SmartInitializingSingleton调用时机的区别一,InitializingBean简介:InitializingBean的代码:package org.springframework.beans.factory;原创 2020-06-12 18:06:56 · 3728 阅读 · 1 评论 -
MyBatis源码学习(六)——在代码中调用Mapper接口时发生了什么
小结:1,开始,MapperProxy.invoke().2,创建MapperMethod。包括创建SqlCommand,封装sql,创建MethodSignature,封装方法参数。3,MapperMethod.execute()4,区分增删改查,查询时,统一调用DefaultSqlSession.selectList()5,CachingExecutor.query()6,SimpleExecutor.doQuery()。创建StatementHandler,确定statemen原创 2020-06-10 20:10:26 · 1199 阅读 · 0 评论 -
MyBatis源码学习(五)——MyBatis配置项的加载过程
先上小结:MybatisAutoConfiguration类的@EnableConfigurationProperties({MybatisProperties.class})注解被Spring激活,准备注入MybatisProperties类。 MybatisProperties类有@ConfigurationProperties(prefix="mybatis")注解,会被ConfigurationPropertiesBindingPostProcessor调用bind()方法来处理。 获得My原创 2020-06-10 18:05:48 · 1358 阅读 · 0 评论 -
MyBatis源码学习(四)——创建Mapper动态代理
先上小结:Spring标准代理创建流程,this.initializeBean()方法。 BeanPostProcessor对Mapper代理实例进行预处理。 执行MapperFactoryBean.afterPropertiesSet(),从MapperFactoryBean.SqlSessionTemplate.SqlSessionFactory.Configuration.MapperRegistry.knownMappers获得之前创建好的工厂代理,如果没有则重新创建一个。 继续Sprin原创 2020-06-10 17:16:22 · 907 阅读 · 0 评论 -
MyBatis源码学习(三)——创建SqlSessionFactory实例和Mapper代理工厂
先上小结:开始调用MybatisAutoConfiguration.sqlSessionFactory()方法。 构建SqlSessionFactoryBean类实例。 把数据源实例DataSource赋值给SqlSessionFactoryBean。 创建Configuration实例,赋值给SqlSessionFactoryBean。 读取mybatis配置文件,把mapperLocations参数赋值给SqlSessionFactoryBean。 SqlSessionFactoryBea原创 2020-06-10 16:45:44 · 1813 阅读 · 0 评论 -
MyBatis源码学习(二)——创建Mapper代理工厂的准备工作
先上小结:@Autowired注解生效。 Spring开始为@Autowired注解的Mapper创建动态代理。使用的是BeanFatory中注册的BeanDefinition。 Spring标准的创建动态代理流程,创建Mapper接口类的BeanWrapper,准备进行属性注入。 准备给Mapper代理注入sqlSessionFactory和sqlSessionTemplate。 Spring标准的创建动态代理流程,创建SqlSessionFactory的代理。使用的是SqlSessionFa原创 2020-06-10 15:56:32 · 414 阅读 · 0 评论 -
MyBatis源码学习(一)——@MapperScan注解扫描Mapper接口文件,创建BeanDefinition
先上小结:@MapperScan注解生效。触发@Import({MapperScannerRegistrar.class})注解。 @Import({MapperScannerRegistrar.class})注解生效。调用MapperScannerRegistrar.registerBeanDefinitions()。 MapperScannerRegistrar创建扫描工具类Scanner。 Scanner从@MapperScan注解中获取Mapper接口路径。 调用Scanner.doSc原创 2020-06-10 15:04:49 · 2860 阅读 · 0 评论 -
MyBatis源码学习(零)——准备
当我们使用MyBatis时,往往会有以下操作:1,添加@MapperScan注解,或者在配置文件中使用<mybatis:scan>进行设置。这一步设置的是需要扫描的Mapper文件路径,比如这样:@Configuration@EnableTransactionManagement@MapperScan({"com.macro.mall.mapper","com.macro.mall.dao"})public class MyBatisConfig {}2,编写Mapper.原创 2020-06-10 14:42:02 · 235 阅读 · 0 评论 -
用Swagger生成SpringBoot接口文档
目录一,原始项目说明二,引入Swagger三,Swagger首页四,Swagger注解使用1,@Api2,@ApiOperation3,@ApiImplicitParam和@ApiImplicitParams4,@ApiResponse和@ApiResponses5,@ApiModel和@ApiModelProperty6,@ResponseHeader...原创 2020-01-14 19:58:58 · 861 阅读 · 0 评论 -
在IDEA上创建SpringCloud常用组件
本文用IDEA创建简单的Spring Cloud的demo,主要涵盖Spring Cloud几种组件,包括注册中心Eureka,服务提供者provider,服务消费者consumer,断路器Hystrix,录音网关ZUUL,路由网关的过滤器Filter,配置中心config等。包含demo代码操作流程。原创 2019-12-31 18:42:08 · 2196 阅读 · 2 评论 -
了解RedisTemplate:从RedisTemplate和StringRedisTemplate的区别开始
从RedisTemplate和StringRedisTemplate的区别开始,逐渐深入RedisTemplate源码,了解RedisTemplate的代码结构,以及RedisTemplate如何完成对redis的操作。原创 2019-12-24 17:30:40 · 2896 阅读 · 0 评论 -
Jeecg-Boot前后端项目部署流程
Jeecg-Boot 是一款基于SpringBoot+代码生成器的快速开发平台,本文介绍的是从Jeecg-Boot官网下载的demo代码如何在Windows和Linux环境下部署。原创 2019-12-17 19:27:49 · 32410 阅读 · 15 评论 -
几个好用的java库
几个好用的java库(转自开源中国)众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库。利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升。举些例子,最常用的官方库有 java.lang、java.util、java.io、java.sql、java.net等;而至于目前最流行的第三方库,就有 Junit、SLF4J、Google转载 2017-08-03 17:02:40 · 1372 阅读 · 0 评论 -
jQuary使用多层dialog时的遮罩(lock:true)
当页面打开一个dialog时,如果lock属性为true,jQuery会给页面添加遮罩。这篇文章讨论的是,dialog如何玩转这个遮罩。 基础知识说明1,CSS的z-index属性z-index属性表示了页面元素的堆叠顺序,属性值越高,越会显示的靠前。也就是说,属性值小的元素会被属性值高的元素盖住。z-index可以是负值。 2,jQuery创建dialog时的lo...原创 2018-12-07 17:57:36 · 2063 阅读 · 0 评论 -
EasyUI:如何判断手动输入的值在combobox下拉框中是否存在
EasyUI的combobox下拉框是一个不错的功能,不但支持了下拉框本身的功能,还附带了模糊查询的功能,虽然只能是ABC*这种前置模式。另外,如果输入的文字和下拉框中的某一条选项完全相同,而且只有一条选项相同时(注意,这里不能是模糊的,必须完全一致),该条选项将被默认选中。这种输入文字的下拉框带来方便的同时也会带来问题:即使输入的文字和下拉框里可选的选项不符,也可以被提交。这一点比较离谱...原创 2018-12-07 18:16:08 · 5553 阅读 · 0 评论 -
EasyUI的combobox使用总结
一,combobox的属性,事件和方法combobox可以配置属性,绑定事件监听,调用方法,理解这几个概念之后会对combobox有更清晰的了解。1,配置属性combobox可以配置自己的属性,他的属性可以定义在<input>或<select>标签的data-options参数中,比如:<select id="type" name="type" cl...原创 2019-01-30 09:11:34 · 32158 阅读 · 2 评论 -
Tomcat版本号问题导致的JSP访问异常
出现问题:项目在Windows系统下用Ant打包。在Linux下启动Tomcat,访问项目的Jsp页面时报错,而且每次访问时报错还不一样,有三种情况:有这样的:HTTP Status 500 – Internal Server ErrorType Exception ReportMessage javax.servlet.ServletException: java.la...原创 2019-02-14 14:59:12 · 3563 阅读 · 0 评论 -
Dubbo的Reference注解必须先启动provider的问题
目录现象看源码分析原因注解Reference第一步:用Reference注解里的参数初始化ReferenceConfig注解Reference第二步:从配置文件里获取参数,写入ReferenceConfig注解Reference第三步:生成Consumer代理解决方案如果只想知道怎么解决,请翻到文章最后一句。现象当使用Dubbo的Reference注解时,...原创 2019-05-23 14:54:46 · 17355 阅读 · 5 评论 -
Spring的RedisTemplate存储的key和value有特殊字符的问题
Spring的spring-data-redis包下有RedisTemplate类,当调用:redisTemplate.opsForValue().set("TEST","ABCD");方法后,Redis里实际保存的key并不完全等于我们预设的key值,而是在key值前面加了一些特殊字符,就像这样的:"\xac\xed\x00\x05t\x00\x0cTEST"而保存的val...原创 2019-06-14 14:36:30 · 15954 阅读 · 4 评论 -
关于Redis的database相关基础
Redis默认提供了16个数据库(database),每个数据库有一个id,从0到15,他们没有名字,只有id。可以在Redis配置文件中修改数据库个数,使用以下配置:databases 32代表启动时提供32个数据库。客户端登录Redis时默认登录的是id为0的数据库。不同的数据库中数据隔离保存。使用select id命令可以切换当前数据库,比...原创 2019-06-14 14:41:32 · 23007 阅读 · 3 评论 -
关于Redis密码的基础知识
Redis可以设置密码,设置密码后如果不用密码登录,执行命令时会提示错误:下面列举一下Redis密码相关知识。1,在配置文件中设置密码在Redis的配置文件中,可以用requirepass参数配置密码,比如这样:requirepass thisispassword那么密码就是thisispassword。配置文件中设置的密码在启动Redis时就会生效。...原创 2019-06-14 14:47:55 · 4489 阅读 · 0 评论 -
Spring是怎样处理form-data和x-www-form-urlencoded请求的参数的
目录前言Spring对请求参数的处理方法对multipart/form-data请求参数的处理对application/x-www-form-urlencoded请求参数的处理前言我们用@RequestMapping标识一个Web请求的映射,可以标识在方法上,当我们向服务器发送一个请求时,由Spring解析请求来的参数,并赋值给方法的参数,比如这样@RequestMa...原创 2019-06-21 17:20:01 · 13610 阅读 · 0 评论 -
SpringBoot启动流程的源码分析
前言:文章很长,一万多字,如果不关注细节的话只看目录就可以。目录设置了缩进,代表了启动流程中方法的调用和包含关系。目录基本上概述了SpringBoot启动的基本流程。目录main方法启动初始化SpringApplication|----|设置ApplicationContextInitializer和ApplicationListener|----|----|读取配...原创 2019-07-11 16:18:10 · 5464 阅读 · 2 评论 -
log4j打印异常堆栈信息的方法
当使用log4j时,如果我们调用logger.info("123");得到的结果只有一行,即使参数中是个Exception对象,也只是输出对象本身的信息依然只有一行。想要像e.printStackTrace()一样输出堆栈信息,可以用logger的以下方法:logger.error("123",e);这种一个字符串一个Exception的方法。参数中只有字符串参数是不行...原创 2019-07-16 15:07:52 · 14930 阅读 · 0 评论 -
Spring解决循环依赖的方法
从逻辑上说明Spring是怎么解决循环依赖的,然后从源码上看Spring是怎么做的。原创 2019-07-25 00:21:15 · 57040 阅读 · 28 评论 -
Spring的@ExceptionHandler注解使用方法
目录1,基本使用方法2,注解的参数3,就近原则4,注解方法的返回值5,错误的操作1,基本使用方法Spring的@ExceptionHandler可以用来统一处理方法抛出的异常,比如这样:@ExceptionHandler()public String handleExeption2(Exception ex) { System.out.println("...原创 2019-08-05 16:18:48 · 79257 阅读 · 16 评论 -
盖住那个下拉框!EasyUI遮罩使用方法简介
EasyUI的遮罩是什么?当EasyUI执行查询时,页面会出现一个遮罩,把页面遮住,在此期间不能操作。当EasyUI打开一个新的窗口时,页面会出现一个遮罩,把父页面遮住,不能操作父页面,但新打开的页面可以操作。就像下面这样:如果这个时候查看页面的HTML元素,会发现有这么两个div标签:class分别是EasyUI的datagrid-mask和datagrid-m...原创 2018-12-07 17:22:35 · 1373 阅读 · 0 评论 -
一次kafka的offset回退事件及相关知识点
目录一,事件回顾二,问题原因三,发生问题时的日志四,避免此问题1,auto.offset.reset参数设置为largest。2,尽量不要一次关闭所有broker。五,相关知识点1,zookeeper记录offset的节点2,关于auto.offset.reset参数。3,几个kafka的命令一,事件回顾1,由3台broker组成的kafka集群,分...原创 2018-10-25 19:27:35 · 7546 阅读 · 1 评论 -
Redis常用命令
本文记录了Redis一些常用的命令和说明,并附上简单例子,当做命令手册,以备后面查阅。目录一,server端命令server启动server停止server重启二,client端命令三,Redis的key1,查找key2,查看某个key是否存在3,删除key4,设置某个key的过期时间5,查看某个key的过期时间四,Redis的value字符...原创 2018-10-10 16:32:57 · 434 阅读 · 0 评论 -
dubbo的consumer代理的生成方式源码
dubbo的consumer只需要在配置文件中配置一个接口的地址,并不需要这个接口有具体的实现类,就可以生成这个接口的代理,通过代理远程调用provider中的方法。和JDK还有CGlib不同,dubbo的consumer生成代理是通过dubbo中的一个com.alibaba.dubbo.common.bytecode.Proxy来生成的,使用了javassist工具来生成代理类的字节码。原创 2017-09-28 16:25:32 · 3096 阅读 · 0 评论 -
Kafka常用命令使用说明
一,查看当前Kafka集群中Topic的情况bin/kafka-topics.sh --list --zookeeper127.0.0.1:2181列出该zookeeper中记录在案的topic列表,只有名字二,查看Topic的分区和副本情况命令:bin/kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --t原创 2017-09-01 19:56:21 · 61496 阅读 · 0 评论 -
mybatis的insert语句获取自增id的方法(mySQL)
前提是数据库表里已经把id字段设置成了自增的javabean的定义是这样的:package test;import java.util.Date;public class Express { private int id; private String orderId; private Date deliveryDate; public int getId() { retu...原创 2017-08-31 11:25:56 · 12289 阅读 · 0 评论 -
spring的InitializingBean在dubbo中的使用
sping的InitializingBean是spring提供的一个接口,里面只有afterPropertiesSet()一个方法,实现了这个接口的类可以在spring注入完成后立刻调用这个方法,实现一些初始化数据或者记录日志之类的功能,感觉跟面向切面一样。经验证,在这个方法里可以使用dubbo的consumer.xml配置文件中配置的service举个例子:定义一个普通的接口原创 2017-09-06 21:27:48 · 673 阅读 · 0 评论 -
kafka在zookeeper上的节点信息和查看方式
kafka在Zookeeper上的节点如下图:该图片盗自大牛的博客http://blog.csdn.net/lizhitao/article/details/23744675服务端开启的情况下,进入客户端的命令:{zookeeper目录}/bin/zkCli.sh以下是几个zookeeper客户端用的命令,不只kafka,其他任何注册到zookeeper的服务都可以使用原创 2017-09-06 11:46:10 · 48661 阅读 · 2 评论 -
Kafka日志存储系统和offset查找逻辑
起始篇 1,kafka通过文件系统来保存和缓存处理的消息,每个发送到kafka的消息,都会被记录到日志文件中,由partition的leader记录,并由partition的follower同步。 2,kafka的消息采用顺序写磁盘的方式记录,速度非常快,时间复杂度是O(1),是kafka高效性的体现。 3,kafka日志的目录在server.properties可以配置,配置项是lo原创 2017-09-05 19:30:41 · 6920 阅读 · 4 评论