- 博客(200)
- 收藏
- 关注

原创 JPA与TkMybatis事物机制
引文上一篇文章我们讲述了DDD+CQRS如何实现优雅查询(见:DDD+CQRS架构如何优雅实现查询),大家肯定会有很多疑问,比如Spring是如何保证JPA与TkMybatis之间的事务一致性的问题。这篇文章我来带领大家走进Spring JPA的事务原理。Spring JPA事务原理在讲Spring JPA的事务原理之前我们先来讲一下Spring的事务原理。Spring的整个事务原理其实非常...
2020-02-10 18:15:12
1396

原创 JMM
Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能得到一致效果的机制及规范。目的是解决由于多线程通过共享内存进行通信时,存在的原子性、可见性(缓存一致性)以及有序性问题。Synchronize关键字实现原理介绍
2020-02-10 09:17:48
436
原创 Spring Boot MVC配置实现方案
配置区别Spring Boot是支持自动配置的webmvc的,我们来看看它的自动配置类。从这个配置类我们可以看出,一但应用上下文中出现WebMvcConfigurationSupport类,自动配置将不再生效,换句话讲就是只有你在WebMvcConfigurationSupport的子类中写那些配置会生效。另外当我们使用@EnableWebMvc注解时,同样会导致Spring Boot的自...
2020-03-19 21:55:46
232
原创 解决SpringBoo输出文档的title乱码问题
问题背景最近橙子开发中遇到一个问题,Spring Boot的输出文档内容出现了title乱码,但是文档内容并没有乱码。效果如下图所示橙子目前的项目是采用前后端分离开发的,前端使用的是基于umi封装的一套框架,后端是采用spring boot。但是不知道为什么集成到一起后项目出现乱码。原因看到这种问题究其原因肯定是编码导致的。打开游览器查看一下请求的响应编码一看,果然是的。输出文档的编码...
2020-03-19 20:50:17
297
原创 解决umi+maven打包的问题
umi是阿里的一个 前端框架,maven想要打包umi框架,必须要用到一个maven插件frontend-maven-plugin。但是不知道为什么在我的本地指定outputPath输出路径时并没有生效。还是输出到umi的默认打包路径/distbuild --outputPath ${project.build.outputDirectory}/META-INF/resourcesmaven...
2020-03-13 16:26:04
568
原创 快速在GitHub搭建一个规范的开源项目(五)
前面我们已经讲了如何在GitHub上创建一个团队,然后规范化开发流程,Issue创建与处理流程,以及如何接入CI和覆盖率报告。传送门:快速在GitHub搭建一个规范的开源项目(一)快速在GitHub搭建一个规范的开源项目(二)快速在GitHub搭建一个规范的开源项目(三)快速在GitHub搭建一个规范的开源项目(四)接下来本来是想跟大家讲一下如何发布一个开源项目到maven公库的,但是...
2020-03-12 12:13:52
242
原创 快速在GitHub搭建一个规范的开源项目(四)
前三篇博客快速在GitHub搭建一个规范的开源项目(一)快速在GitHub搭建一个规范的开源项目(二)快速在GitHub搭建一个规范的开源项目(三)我们已经介绍了如何初始一个团队并且制定了规范的开发流程和代码提交流程,Issue规范以及接入CI。接下来我们介绍如何统计项目的单侧覆盖率。这里我们用到的工具是codecov。官网链接其他集成非常简单,只要登录官网,然后关联GitHub账...
2020-03-11 20:52:54
314
原创 快速在GitHub搭建一个规范的开源项目(三)
上两篇博客快速在GitHub搭建一个规范的开源项目(一) 快速在GitHub搭建一个规范的开源项目(二)我们分别讲了如何如何初始一个团队并且制定了规范的开发流程和代码提交流程以及Issue规范。这一篇我们来讲一下如何规范的在GitHub上做持续集成。经常游览GitHub的同学可能发现,大一点的开源项目都会有这个两个标志。build passing和codecov。这两个标志分别代表单测通...
2020-03-11 20:18:47
319
原创 快速在GitHub搭建一个规范的开源项目(二)
上一篇博客快速在GitHub搭建一个规范的开源项目(一)我们讲了如何如何初始一个团队并且制定了规范的开发流程和代码提交流程。这一篇我们来讲讲如何正确使用Issue。很多人其实对Issue功能存在误解,认为Issue就是用来提交bug的,其实不然。GitHub上的Issue功能非常强大,使用好了的话完全可以充当一部分JIRA的功能,可以方便做版本复盘,以及收集需求,然后可以可以成为大家讨论问题的...
2020-03-11 18:35:35
505
原创 快速在GitHub搭建一个规范的开源项目(一)
前言最近橙子的团队在研究如何将团队内部的框架开源出来,以便让更多的人来参与到我们这几个框架的建设中来。其实,开源本身是一件非常好的事情。现代IT行业之所以如此快速的发展与开源脱离不了干系。很多人也许都有搭建自己的开源项目,然后发现过了几个月,项目还是寥寥数个star,也没啥人给你提issue。说到底还是你的开源项目不够规范,内容太杂乱。接下来,橙子一共分五篇文章来给大家讲述一下,到底如何搭建一...
2020-03-11 18:09:20
931
原创 Spring中FactoryBean的正确用法
FacotryBeanSpring中一共有两种Bean。一种是普通的bean,一种是工厂bean。工厂bean注入到spring中的是其getObject()返回的对象实例。接下来我们通过两个例子来讲解如何正确的使用FactoryBean。下面这两个案例分别来自我们团队维护的两个开源项目:基于dubbo的远程SPI项目Spring策略框架大家有兴趣可以去了解一下案例一实现Facto...
2020-03-10 23:14:18
637
原创 spring data redis快速上手
本文讲述如何在spring boot中集成redis,并使用redis进行操作。下一篇我们讲redis实战maven配置如下:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</art...
2020-03-08 20:41:27
126
2
原创 Redis事务命令实现
Redis 事务Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:开始事务。命令入队。执行事务。案例以下是一个事务的例子,...
2020-03-08 16:46:39
118
原创 Redish订阅与发布机制
Redis 发布订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个...
2020-03-08 16:23:22
423
原创 Redis数据类型
String(字符串)string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。redis 127...
2020-03-08 13:13:23
56
原创 Redis入门
Redis 简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redi...
2020-03-08 12:29:25
73
原创 一文带你掌握Mapstruct用法
MapStruct用途在我们项目中,我们经常要处理将DTO转换成VO,DTO转成Entity等各类对象相互转换,如果我们采用BeanUtils工具类的copyProperty进行转换,很容易出现转换性能低,类型转换错误等问题。与其他转换工具相对,MapStruct具有以下优点:通过使用普通方法调用而不是反射来快速执行编译时类型安全性:只能映射相互映射的对象和属性,不能将订单实体意外映射到客...
2020-03-07 15:38:38
18327
1
原创 如何简单的使用Groovy+Spock写单测用例
概述 软件测试是软件开发中必不可少的流程之一,但是软件测试又全部都是测试人员的工作,作为开发人员最好也承担其中的一部分工作,因为开发人员了解自己的功能需要覆盖哪些必要的场景,而测试人员是帮你找到你没有覆盖到的场景。而且写单测用例能够有效的帮助项目做CI与DI。所以,既然是一件不可避免的事,我们何不让其变得简单呢。依赖与基础本人的项目环境如下:JDK8,Spring Boot 2.2.0....
2020-03-07 14:13:00
834
原创 如何解决antd组件动态添加表单控件无法覆盖默认值问题
问题由于项目需要实现一个为经销商添加管理员的功能。如下图所示:要求:至少添加一个管理员账号需要对管理员手机号做格式校验,非空校验,去重校验;管理员姓名做非空校验能够动态删除和添加管理员,并且格式化数据表单提交实现看到这里我们立马能够想到在通过数据实现,react语言的特殊性,通过数据反映dom的变化,所以对数据元素的添加和删除能够反映的dom元素。好了,原理知道了。接下来上代码...
2020-02-27 18:03:04
1630
6
原创 一文读懂Spring Boot原理
什么是SpringBootSpringBoot基于强大的Spring框架,推崇JavaConfig的配置和注解的方式,并且默认配置满足绝大多数场景的需要的web开发框架;比如在pom文件中引入spring-boot-starter-web依赖,就会把web开放所需要的jar包统一引入,降低pom的复杂度。Spring Boot通过内嵌Servlet容器(Tomcat、Jetty,等等)的方式,...
2020-02-24 19:32:33
545
原创 代码圈复杂度
定义圈复杂度 (Cyclomatic complexity) 是一种代码复杂度的衡量标准,也称为条件复杂度或循环复杂度,它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。简称 CC 。其符号为 VG 或是 M 。圈复杂度 在 1976 年由 Thomas J. McCabe, Sr. 提出。圈复杂度大说明程序代码的...
2020-02-24 19:24:22
4047
原创 Java中IO流利用缓冲区的发展过程
在讲缓冲区这个概念前,我们先来了解什么是流。Java中的流按照不同的分类有很多,比如按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流的角色划分为节点流和处理流。Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0流的40多个类都是从如下4个抽象类基类中派生出来的。InputStrea...
2020-02-19 20:47:29
775
转载 maven常用命令
Maven常用命令:Maven库:http://repo2.maven.org/maven2/Maven依赖查询:http://mvnrepository.com/一,Maven常用命令:1. 创建Maven的普通Java项目:mvn archetype:create -DgroupId=packageName -DartifactId=project...
2020-02-12 21:14:49
51
原创 Spring AOP
通配符* :匹配任何数量字符; .. :(两个点)匹配任何数量字符的重复,如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。 + :匹配指定类型的子类型;仅能作为后缀放在类型模式后边。匹配模式匹配方法 格式:annotation_pattern modifiers-pattern? ret-type-pattern declaring-type-pattern?n...
2020-02-12 21:09:38
73
原创 简述AQS设计之道
引文说起AQS(AbstarctQueuedSynchronizer)不得不提起JUC,JUC包中几乎百分之80%以上的同步实现都是采用AQS实现的。即使没有直接用到AQS也是间接的用到了AQS的三大核心思想。所以与其在文中给大家一词一句的分析代码,不如给大家讲讲AQS的背后核心思想(简称AQS三板斧),因为源码大家都安装有jdk,可以自己看。但是很多时候代码是看懂了,其背后的原理没有搞懂。...
2020-02-12 21:09:25
268
原创 intellij IDEA常用快捷键
IntelliJ Idea 常用快捷键列表**Ctrl+Shift + Enter,语句完成**“!”,否定完成,输入表达式时按 “!”键**Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件**Shift+Click,可以关闭文件Ctrl+[ OR ],可以跑到大括号的开头与结尾**Ctrl+F12,可以显示当前文件的结构****Ctrl+F7,可以查询当前元素在当...
2020-02-11 09:39:18
54
原创 类的加载机制
类加载加载: 获取类的字符流 将类的静态数据结构解析成方法区的运行时数据结构 提供一个Class对象访问方法区的数据结构 验证 校验魔术因子,版本等 准备 将类变量初始化成0值,final赋常量初始值 解析 将符号引用转换成直接引用 初始化 执行类的<clinit>方法,由编译器收集类的成员变量赋值,static块组合成此方法,绝对的线程...
2020-02-11 09:38:08
72
原创 (六)生成XML文档
一、不带命名空间的文档 //先建立一棵DOM树 Document doc = builder.newDocument(); Element rootElement = doc.createElement(rootName); Element childElement = doc.createElement(childName); 使用createT...
2020-02-11 09:36:25
118
原创 (四)指定文档规则--DTD
指定文档规则DTD或schema例如: <! ELEMENT font(name,size)> 指定font元素必须含有name和size两个子元素 XML schema <xsd:element name="font"> <xsd: sequence> ...
2020-02-11 09:36:18
192
原创 (五)指定文档规则XML Schema
如需采用Schema解析需要在根元素中添加属性例如:<? xml version="1.0" ?><configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="config.x...
2020-02-11 09:36:16
112
原创 (二)DOM解析XML
两种解析方式: 一、DOM(文档对象模型)解析 二、SAX(像XML简单API)解析 流机制解析器,在读入xml时生成对应的事件。适用于只对某些元素感兴趣,不关心上下文DOM解析//创建一个解析工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//创...
2020-02-11 09:36:00
60
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人