![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 93
爆裂码手
I thought coding was easy.
展开
-
解决github的pageHelper中查询出来的分页对象PageInfo<PO>优雅转化PageInfo<DTO>的问题
在我们使用github的pageHelper的时候,我们查出来的是PO对象,我们往往在上层需要DTO或VO回想,这里我写了一个工具类来优雅的转化PageInfo类型工具类 PageInfoUtil.javaimport com.github.pagehelper.Page;import com.github.pagehelper.PageInfo;import org.springfr...原创 2019-07-22 10:59:54 · 11875 阅读 · 4 评论 -
MyBatis源码阅读——MyBatis缓存的原理解析
前言MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。除了局部的 session 缓存,默认情况下是没有二级开启缓存的。那么MyBatis的一级缓存跟二级缓存在它的框架内部是如何实现的?我们去一探究竟吧。一级缓存一级缓存是默认开启的。当然你也可以关闭。在SQL 映射文件中,设置语句参数即可: flushCache 将其设置为 true,任何...原创 2018-06-07 16:25:34 · 508 阅读 · 0 评论 -
MyBatis源码阅读——通过debug解析MyBatis运行流程
最近在阅读MyBatis框架的源码。发现它其实是一个非常值得阅读的框架。它灵活得运用了常见的设计模式去设计。值得我们去学习。我还是比较喜欢以debug阅读MyBatis的源码。原创 2018-06-07 13:22:08 · 16468 阅读 · 5 评论 -
MyBatis源码阅读——MyBatis对事务的处理过程分析
事务管理器在 MyBatis 中有两种类型的事务管理器(也就是 type=”[JDBC|MANAGED]”): &lt;environments default="development"&gt; &lt;environment id="development"&gt; &lt;!-- 配置事务管理器 --&a原创 2018-06-13 16:16:18 · 1644 阅读 · 0 评论 -
MyBatis源码阅读——装饰器模式在MyBatis中的应用
MyBatis中关于Cache和CachingExecutor接口的实现类也使用了装饰者设计模式。Executor是MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护;CachingExecutor是一个Executor的装饰器,给一个Executor增加了缓存的功能。此时可以看做是对Executor类的一个增强,故使用装饰器模式是核实的。Exec...原创 2018-06-06 14:45:38 · 1879 阅读 · 0 评论 -
MyBatis源码阅读——Spring加载MyBatis过程解析
我们平时在项目中都是用Spring来管理的,那么,Spring是如何管理MyBatis的呢?我们来一探究竟。编程式加载MyBatis要了解Spring是如何加载MyBatis的,我想还是先来回顾一下我们是如何用编程的方式去加载MyBatis框架的 String resource = &amp;quot;mybatis/conf/mybatis-config.xml&amp;quot;; InputStre...原创 2018-06-12 11:34:48 · 11492 阅读 · 0 评论 -
MyBatis源码阅读——MyBatis插件原理
前言MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括。Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject...原创 2018-06-11 16:26:56 · 835 阅读 · 0 评论 -
设计模式——装饰器模式
装饰器模式动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。结构抽象组件(Component):需要装饰的抽象对象。 具体组件(ConcreteComponent):是我们需要装饰的对象 抽象装饰类(Decorator):内含指向抽象组件的引用及装饰者共有的方法。 具体装饰类(ConcreteDecorator):被装饰的对象。 demo...原创 2018-05-28 13:54:17 · 245 阅读 · 0 评论 -
Mybatis中配置多个数据源的两种实现方式
需求描述在我们的开发过程中,一个项目连接多个数据库经常出现。在Spring+Mybatis的项目中,遇到这种情况该怎么办? 我整理了一下,基本上两种方式去解决。 配置多个sqlSessionFactory配置多个数据源使用AOP切换配置多个sqlSessionFactory的方式实现多数据源配置这种方式是比较简单的,在xml中,配置多个sqlSessionFactor...原创 2018-05-17 10:48:02 · 19421 阅读 · 3 评论 -
Spring JTA——使用Atomikos实现分布式事务
问题 多个数据源连接多个数据库,如何保证事务配置<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/bean...原创 2018-04-24 11:44:16 · 990 阅读 · 0 评论 -
SpringBoot+SpringCloud脚手架
项目地址https://github.com/yuyufeng1994/sample-springboot模块说明[sample-springboot-provider] 提供层[sample-springboot-web] springboot的基本使用[sample-springcloud] springcloud模块[sample-springb...原创 2018-04-13 14:43:08 · 1863 阅读 · 0 评论 -
Spring源码阅读——Core Container(核心容器)
Spring中的Core Container(核心容器)包含有Core、Beans、Context和Expression Language模块。Core和Beans模块是框架的基础部分,提供IoC(反转控制)和依赖注入特性。这里的基础概念是BeanFactory,它对Factory模式的金典实现来消除对程序性单利模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。Core 模块主要包...原创 2018-07-06 14:01:17 · 4345 阅读 · 0 评论 -
MyBatis源码阅读——MyBatis初始化流程解析
前言在之前的几篇文章中,我们在源码中看到到了很多类,比如mapperRegistry、mappedStatements等,虽然我们知道它们都是在MyBatis初始化的时候完成加载的,那么我们还是有必要去了解一下其加载过程。 还是跟之前一样,写一个demo,去边debug 边阅读源码。 public static void main(String[] args) throws IOExce...原创 2018-06-07 17:54:15 · 521 阅读 · 0 评论 -
MyBatis中自定义二级缓存(使用Redis做缓存)
在MyBatis中,默认的二级缓存Cache实现是PerpetualCache,而通常,这种方式满足不了分布式集群的项目,这时候,五门可以借助一些第三方服务来做缓存,比如Redis,下面,来尝试下用Redis做MyBatis的二级缓存原创 2018-06-25 16:50:41 · 3470 阅读 · 0 评论 -
MyBatis源码阅读——MyBatis插件PageHelper的实现过程
前言在之前的文章 MyBatis源码阅读——MyBatis插件原理中我们已经知道MyBatis的插件是如何运行的,这篇文章中,我们将去了解MyBatis常用插件com.github.pagehelper.PageHelper的实现过程示例代码https://github.com/yuyufeng1994/learn-mybatis/blob/master/mybatis-demo/src/m...原创 2019-05-24 11:38:33 · 442 阅读 · 0 评论 -
[html5 canvas]用html5的canvas画一个可移动的方块
&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&amp;lt;head&amp;gt; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt; &am原创 2018-11-08 17:08:23 · 4946 阅读 · 3 评论 -
Spring源码阅读——BeanFactoryPostProcessor与BeanPostProcessor
摘要Spring IoC容器允许BeanFactoryPostProcessor在容器实例化任何bean之前读取bean的定义(配置元数据),并可以修改它。BeanFactoryPostProcessor:BeanFactory的后置处理器(处理的对象是BeanFactory),BeanFactoryPostProcessor是在spring容器加载了bean的定义文件之后,在bean实例化...原创 2018-10-10 14:45:13 · 322 阅读 · 0 评论 -
框架集成——SpringMVC与MyBatis集成(超详细)
SpringMVC与MyBatis是我们现在最流行的开发框架组合之一,这里我来整理一下框架的集成搭建过程前言使用IDE:IntelliJ IDEA JDK:1.8打开IDEA,新建maven工程第一步:打开IDEA,点击Create New Project 第二步: 选择新建一个Maven项目,然后从Maven项目模板工具包中选择常用的[maven-arche...原创 2018-08-24 11:04:38 · 21544 阅读 · 2 评论 -
Spring源码阅读——bean提取注册过程
BeanDefinition定义及作用BeanDefinition作为定义springBean文件中bean的接口,可以说是bean的抽象数据结构,它包括属性参数,构造器参数,以及其他具体的参数。当 BeanDefinition 注册完毕以后, Spring Bean 工厂就可以随时根据需要进行实例化了。对于XmlBeanFactory 来说,实例化默认是延迟进行的,也就是说在 getBean...原创 2018-07-06 14:13:45 · 963 阅读 · 0 评论 -
借助Spring的Resource去读取资源文件
在阅读Spring源码的过程中,我们可以看到,Spring的配置文件读取是通过ClassPathResource进行封装的,在日常的开发工作中,资源文件的加载也是经常用到的,可以直接使用Spring提供的类。而且可以使用该类支持的其他功能。import org.springframework.core.io.ClassPathResource;import org.springframewo...原创 2018-07-05 10:45:19 · 2403 阅读 · 0 评论 -
Spring源码阅读——ApplicationContext
Spring中提供了一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。它提供了更多的功能。现在我们来看下它的实现: public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) ...原创 2018-07-17 16:33:28 · 416 阅读 · 0 评论 -
spring-boot-devtools在Idea中热部署方法使用
1、引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖...原创 2018-07-03 09:15:18 · 2660 阅读 · 0 评论 -
Spring源码阅读——bean的加载过程解析
前言在上一节中,我们已经了解过Spring对bean从XML中提取,并且以BeanDefinition类型解析注册到Spring的DefaultListableBeanFactory中取了,那么,接下来就应该来看下我们在Spring中获取一个实例过程中,bean是如何加载成为我们需要的对象的了。通过getBean方法了解bean的加载在Spring中我们是通过getBean方法去获取,...原创 2018-07-09 16:42:52 · 573 阅读 · 1 评论 -
到底什么是RPC,不妨自己动手写一个。了解一下?
RPC是一种远程过程调用协议。RPC主要功能:异构分布式项目之间的通信,使消费者只需要知道接口,远程调用方法就像调用本地方法一样。 要使得消费层只通过接口调用远程实现方法,那么其之间的传输数据肯定是:类、方法、参数、返回值,以及一些其它传输的信息。 之间涉及到通信,肯定要发布服务供客户端请求。客户端要执行未知实现的方法,是通过动态代理实现的。 在了解动态代理的使用后,就会发现,在动态代理的方法执行...原创 2018-04-10 17:11:27 · 1080 阅读 · 0 评论 -
quartz与Spring的整合
简介Quartz是一个功能丰富、开源的作业调度库,可以集成在几乎任何java应用程序从最小的独立的应用程序的最大的电子商务系统。Quartz可以用来创建简单或复杂的执行数十,数百的时间表,甚至成千上万的工作;其任务是定义为一个标准的java组件,可以执行几乎任何你可以计划去做的工作。Quartz调度包括很多企业级功能,如JTA事务支持和聚类。本篇文章是quartz与Spring的整合的例子,然...原创 2018-04-02 15:05:31 · 348 阅读 · 0 评论 -
volatile关键字原理
volatile关键字经常在并发编程中使用,其特性是保证可见性以及有序性,但是关于volatile的使用仍然要小心,这需要明白volatile关键字的特性及实现的原理,这也是本篇文章的主要内容。一、Java内存模型想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的。Java内存模型规定了所有的变量都存储在主内存中。每条线程中还有自己的工作内存,...转载 2018-03-25 19:49:22 · 200 阅读 · 0 评论 -
关于分布式锁的思考
在分布式集群项目中,同步synchronized (args) {} 已经不再适用。要锁也只是锁住一台服务器。那么如何去做分布式集群锁呢??首先,我们会想到,要保证分布式集群项目的原子性操作,以我目前的能力,只有两种方法。1、是锁的标记可以在项目互相通信2、使用一台单机服务器来标记,并保证这一单机服务标记的原子性。我觉得第二种方式还是比较容易实现的。现在的redis性能想当高,我想原创 2017-01-23 15:17:48 · 2059 阅读 · 0 评论 -
基于redis的分布式锁的实现
之前一直对分布式锁有所思考。一直觉得现在高性能的redis是个不错的选择;前文:关于分布式锁的思考 今天也尝试着写了一个基于redis的分布式锁工具LockUtil.java package yyf.Jedis.toolsByRedis;import java.util.concurrent.atomic.AtomicInteger;import redis.cl...原创 2017-02-07 10:51:09 · 4621 阅读 · 3 评论 -
nginx+tomcat负载均衡、session处理策略
我先来说一下简单的配置nginx转发吧。首先,把我们的tomcat项目配置三个,并行启动在本地。端口分别为:8080、8180、8280然后,安装nginx,具体步骤如下:下载链接http://nginx.org/download/nginx-1.8.0.tar.gz安装命令 ./cibfigure安装pcre: yum -y install pcre原创 2017-01-23 15:47:34 · 904 阅读 · 1 评论 -
哈希算法的实现
在我们开发的过程中,我们发现处处都会有hash。java中,Object有hash值,有hashtable,有hashmap。在我们的分布式集群中,一致性哈希一直也是个热门的词。那么,一致性hash到底是什么呢?网上的博文很多,但是总觉得那么抽象。我想,我需要简化它的呈现形式。首先,我们还是来复习以下hash算法吧。我建一个类来模拟hash,其中采用%13的取法去取hash值。对于冲突原创 2017-02-13 14:45:41 · 926 阅读 · 0 评论 -
基于SpringMVC+JPA的集群实战——树苗销售系统
https://github.com/yyfyyf1994/ProTreeShop项目使用redis做session共享,支持tomcat集群部署基于SpringMVC+JPA,无需数据库语句编写。开发便捷效果:项目依赖:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.原创 2017-02-13 11:03:08 · 678 阅读 · 0 评论 -
基于Spring MVC+Mybaits的集成
在我们开发web项目的时候,我们不断的集成框架。比如我就从一开始的Servlet+DButils到Struts2+SpringMVC+Hibernate,然后又集成JPA。发现自己开发的时候用Struts2开发太慢,就从Struts2到Spring MVC的转换。每次集成框架,总会有更加让自己的开发变得便捷。比如,用了JPA+Hibernate之后,对于合适的项目开发非常快。后来,由于项目需要,发...原创 2017-02-13 10:41:29 · 607 阅读 · 0 评论 -
集中日志服务器Rsyslog
分布式集群服务器日志集中方案原创 2017-02-17 12:03:29 · 1931 阅读 · 1 评论 -
深度剖析ConcurrentHashMap
在阅读Spring IOC源码的时候,发现了里面的map是ConcurrentHashMap。有些疑问,我们平时都使用HashMap和HashTable,我们也知道,HashMap是线程不安全的,但是效率高,HashTable则反之。对于其中的细节,也略知一二。至于ConcurrentHashMap则是既有效率又安全的,具体呢?今天在网上看到一篇很不错的文章,跟大家分享。Concurren转载 2016-11-28 15:17:16 · 667 阅读 · 0 评论 -
处理java日期的一些操作
package yyf.java.util.DateTest;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import org.junit.Test;/** * 对日期类的一些操作 * * @aut原创 2016-11-28 14:34:32 · 282 阅读 · 0 评论 -
Java中的24种设计模式与7大原则:
Java中的24种设计模式与7大原则:一、创建型模式1、抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2、生成器模式(Builder pattern): 使用生成器模式封装一个产品的构造过程, 并允许按步骤构造. 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示.3、工厂转载 2016-12-01 08:47:22 · 1483 阅读 · 0 评论 -
JDK源码阅读——模拟HashMap
先把代码贴上;package yyf.java.util.Map.model;/** * Map的仿造 * * @author yuyufeng * * @param * @param */public class MyMap { static final int ARRAYMAX = 10; public MyMap() { table = new Nod原创 2017-02-15 17:40:56 · 457 阅读 · 0 评论 -
Java泛型在静态方法中的使用
我们在静态方法中使用泛型的时候,我们需要在static 后面加上<T>泛型标识原创 2017-08-17 21:39:23 · 11477 阅读 · 0 评论 -
Java中使用Future获取线程异步执行结果的使用
Java中使用Future获取线程异步执行结果的使用,超时放弃的代码策略原创 2017-08-17 22:53:32 · 2779 阅读 · 0 评论 -
MyBatis自动化插件的使用
MyBatis插件的使用git地址 https://github.com/yuyufeng1994/sample-tkmybatis-spring调试 test目录下直接单元调试,测试运行,查看流程generator从数据库生成class、mapper、xml相关配置:generator.properties、generatorConfig.xml 对...原创 2018-02-27 17:35:59 · 439 阅读 · 0 评论