为什么要进行数据库版本控制?假设我们有一个名为 Shiny 的项目,其主要交付项目是一个名为 Shiny Soft 的软件,该软件连接到名为 Shiny DB 的数据库。最简单的图可能看起来像这样: 但是在大多数项目中,我们的数据库都是像以下这样:通常,我们的环境不仅仅只有一套,一般来说会有 DEV、TEST、PROD 三套环境。而在每次发版的时候,我们可能都会对数据库的表结构进行新增和变更,又或...
阅读全文 »

引言用 swagger2 来生成接口文档,让我们脱离了传统的手写文档的模式,它可以轻松的整合到 Spring Boot 中,用很少的代码就能生成一份漂亮的文档,同时让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时同步维护接口文档。另外 Swagger2 也提供了强大的页面测试功能来调试每个 RESTful API。具体效果如下图所示: 下面来具体介绍如何集成 首先需要创建一个 spr...
阅读全文 »

在 Github 上我们经常看到提交记录里有各种图标,如 🎨⚡️🍎 等,是如何实现的呢? 其实非常简单,就是在提交的时候加入以下表情代码即可 图标 表情代码 表示意义🎨 ::art: 改进代码的结构/格式。⚡️ ::zap: 提高性能。🔥 ::fire: 删除代码或文件。🐛 ::bug: 修复错误。🚑 ::ambulance: 关键修补程序。✨ ::sparkles: 引入新功能。📝...
阅读全文 »

在 Web 开发中,静态资源的访问是必不可少的,如:图片、JS、CSS 等资源的访问。Spring Boot 对静态资源访问提供了很好的支持,基本使用默认配置就能满足开发需求。 默认静态资源映射Spring Boot 默认将 /** 所有访问映射到静态资源目录。 Spring Boot 提供默认静态资源目录位置需置于 classpath 下,目录名需符合如下规则: 1234/static/publ...
阅读全文 »

在 Linux 系统上,打开终端,一般默认的颜色是黑白。这样颜色比较单调,有时我们需要在终端上打印出一些提示语,需要使用不同的颜色,那怎么设置终端输出内容的颜色呢?本文将详细讲解 颜色控制原理 ANSI 转义序列ANSI 转义序列是一种带内信号的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列,大部分以 **ESC 转义字符和[**字符开始,终端会把这些字...
阅读全文 »

常用 Maven 插件介绍我们都知道 Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有 这些任务都交给插件来完成,例如编译源代码是由 maven- compiler-plugin 完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如 maven- compiler-plugin 的 compile 目标用来编译位于src/main/...
阅读全文 »

轻量级锁的加锁过程(1)在代码进入同步块的时候,如果同步对象锁状态为无锁状态(锁标志位为“01”状态,是否为偏向锁为“0”),虚拟机首先将在当前线程的栈帧中建立一个名为锁记录(Lock Record)的空间,用于存储锁对象目前的Mark Word的拷贝,官方称之为 Displaced Mark Word。这时候线程堆栈与对象头的状态如图2.1所示。(2)拷贝对象头中的Mark Word复制到锁记录...
阅读全文 »

在 Hotspot 虚拟机中,对象在内存中的布局分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding); 从上面的这张图里面可以看出,对象在内存中的结构主要包含以下几个部分: Mark Word(标记字段):对象的Mark Word部分占4个字节,其内容是一系列的标记位,比如轻量级锁的标记位,偏向锁标记位等等。 Klass Pointer(Clas...
阅读全文 »