0%

前言

初始化数据库

在 MySQL 执行 XXL-JOB GitHub 仓库中的 SQL 初始化脚本,初始化完成后一共有 8 张表

表名称描述
xxl_job_group 执行器信息表,用于维护任务执行器的信息
xxl_job_info 调度扩展信息表,用于存储调度任务的扩展信息,比如任务分组、任务名、机器的地址等
xxl_job_lock 任务调度锁表
xxl_job_log 日志表,用于存储任务调度的历史信息,例如调度结果、执行结果、调度入参等
xxl_job_log_report 日志报表,用于存储任务调度的日志报表,会在调度中心里的报表功能里使用到
xxl_job_logglue 任务的 GLUE 日志,用于存储 GLUE 日志的更新历史变化,支持 GLUE 版本的回溯功能
xxl_job_registry 执行器的注册表,用在维护在线的执行器与调度中心的地址信息
xxl_job_user 系统的用户表,可以用表中默认的用户名与密码进行登录
阅读全文 »

大纲

什么是任务调度

任务调度就是我们常说的定时任务,定时任务是指在指定时间、指定的频率去执行任务(业务代码)。任务调度是日常开发中非常常见的一个业务场景,我们经常需要去运行一些的周期性、指定时间点等方式自动触发的异步业务逻辑。

集中式任务调度

集中式任务是与分布式任务恰好相反的概念,集中式任务就是单机任务,一个项目,一台机器,也就是我们常说的单体应用。对于集中式任务,也就是我们 Java 开发中常见的定时任务。

阅读全文 »

前言

为了实现不同环境构建的不同需求,这里使用到了 Maven 的 Profile 特性。因为 Profile 能够在构建时修改 POM 的一个子集,或者添加额外的配置元素。接下来将介绍 Maven 中对 Profile 的配置和激活。

阅读全文 »

大纲

JVM 简单介绍

JVM 内存结构

JVM 内存结构主要有三大块:栈、堆内存、方法区。堆内存是 JVM 中最大的一块。方法区存储类信息、静态变量、常量、常量池等数据,是线程共享的区域,为了与 Java 堆区分,方法区还有一个别名 Non-Heap (非堆)。栈又分为 Java 虚拟机栈和本地方法栈,主要用于方法的执行。

阅读全文 »

大纲

前言

性能指标

  • RT (Response Time):用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。
  • HPS (Hits Per Second):每秒点击的次数,单位是次 / 秒。
  • TPS (Transaction per Second):系统每秒处理交易 (事务) 的笔数,单位是笔 / 秒。
  • QPS (Query per Second):系统每秒处理查询的次数,单位是次 / 秒。
阅读全文 »

前言

本文主要介绍 Java 的五种代理实现方式,包括 Cglib、ASM、Javassist、Byte Buddy、JDK 代理,点击 下载完整的案例代码。

准备工作

先定义出一个接口和相应的实现类,方便后续使用代理类在方法中添加日志信息。

  • 接口
1
2
3
4
5
public interface IUserApi {

String queryUserInfo();

}
阅读全文 »

估算算法

第一种估算算法

先来一个天真的估算算法:假设要求一个系统的 TPS(Transaction Per Second 或者 Task Per Second)至少为 20,然后假设每个 Transaction 由一个线程完成,继续假设平均每个线程处理一个 Transaction 的时间为 4s。那么问题可以转化为:如何设计线程池大小,使得可以在 1s 内处理完 20 个 Transaction?这里计算过程可以很简单,每个线程的处理能力为 0.25TPS,那么要达到 20TPS,显然需要 20/0.25=80 个线程。

很显然这个估算算法很天真,因为它没有考虑到 CPU 数目。一般服务器的 CPU 核数为 16 或者 32,如果有 80 个线程,那么肯定会带来太多不必要的线程上下文切换开销。

第二种估算算法

第二种估算算法比较简单,但不知是否可行(N 为 CPU 总核数):

  • 如果是 CPU 密集型应用,则线程池大小设置为 N+1
  • 如果是 IO 密集型应用,则线程池大小设置为 2N+1

如果一台服务器上只部署这一个应用并且只有一个线程池,那么这种估算或许合理,具体还需自行测试验证。

阅读全文 »

前言

本文主要介绍如何检测 Java 代码规范与格式化 Java 代码,包括 IDEA 插件与 Maven 插件的使用。

代码规范检测插件

IDEA 代码规范检测插件

IDEA 可以使用 CheckStyle-IDEA 插件来检测 Java 代码的规范,它可以保证每位提交者的代码规范都保持一致。值得一提的是,CheckStyle-IDEA 插件只能检测代码的规范,并不能格式化代码。

创建规则文件

在项目中创建 checkstyle.xml 规则文件,例如路径为 config/checkstyle/checkstyle.xml

提示

  • 1、CheckStyle 的版本与 checkstyle.xml 规则文件的内容必须互相匹配,否则会影响代码规范检测插件 CheckStyle-IDEA 的正常运行。
  • 2、Alibaba Nacos 项目的 CheckStyle 规则文件可以从 GitHub 获取,详细的使用说明请看 官方文档
  • 3、Google 的 CheckStyle 规则文件可以从 GitHub 获取。
  • 4、Spring 的 CheckStyle 规则文件可以从 GitHub 获取。
  • Alibaba Nacos 的 CheckStyle 规则文件如下,要求 CheckStyle 的版本至少为 8.30
阅读全文 »

前言

本文将介绍 VuePress 如何渲染 Mermaid 绘图,适用于 VuePress 1.x 与 VuePress 2.x。

VuePress 1.x

VuePress 1.x 可以直接安装第三方插件 vuepress-plugin-mermaidjs 来渲染 Mermaid 绘图,插件的详细文档可看 这里

安装插件

安装插件时必须指定具体的版本号,否则默认会安装最新版本的插件,最新版本不兼容 VuePres 1.x。

1
$ npm install vuepress-plugin-mermaidjs@1.9.1 -D

配置插件

编辑 VuePress 1.x 的 .vuepress/config.js 配置文件,新增 mermaidjs 插件,如下所示:

1
2
3
4
5
module.exports = {
plugins: [
'vuepress-plugin-mermaidjs'
]
}
阅读全文 »

前言

Docker 镜像

本文直接使用 DockerHub 平台上的 Oracle 11g 镜像,基于 Ubuntu 18.04 LTS 系统,数据库版本是 Oracle Express Edition 11g Release 2(11.2.0.2.0)。

Oracle 版本列表

在 Oracle 数据库的发展中,数据库一直处于不断升级状态,一共有以下几个版本:

  • Oracle 8i:Oracle 8i 表示 Oracle 正式向 Internet 上发展,其中 i 表示就是 internet。
  • Oracle 9i:Oracle 8i 是一个过渡版本,Oracle 9i 是一个更加完善的数据库版本。
  • Oracle 10g:g 表示 grid,代表网格的意思,即这种数据库采用网格计算的方式进行操作。
  • Oracle 11g:是 Oracle 10g 的稳定版本,Oracle 11g 是目前使用最广泛的版本。
  • Oracle 12c:是 Oracle 2013 年推出的数据库版本,c 代表 Cloud,代表云计算的意思,同时 Oracle 12c 支持大数据的处理能力。
  • Oracle 18c、Oracle 19c 是对 12c 版本的完善和发展。
阅读全文 »