Quartz调度源码分析

前言 上一篇文章Quartz数据库表分析介绍了Quartz默认提供的11张表,本文将具体分析Quartz是如何调度的,是如何通过数据库的方式来现在分布式调度。 调度线程 Quartz内部提供的调度类是QuartzScheduler,而QuartzScheduler会委托QuartzSchedulerThread去实时调度;当调度完需要去执行job的时候QuartzSchedulerThread并没有直接去执行job, 而是交给ThreadPool去执行job,具体使用什么ThreadPool,初始化多线线程,可以在配置文件中进行配置: 常用的线程池是SimpleThreadPool,这里默认启…

阅读全文 »

Quartz数据库表分析

前言 上一篇文章Spring整合Quartz分布式调度介绍了Quartz通过数据库的方式来实现分布式调度,通过使用数据库来存储trigger,job等信息,可以在停服重启的时候重新加载上次trigger的状态,保证了完整性;另一方面通过数据库来实现锁机制来实现分布式调度;Quartz默认提供了11张表,本文将对这几张表做简要的分析。 表信息 共11张表,前6张都是关于各种triggers的信息,后面包括job,悲观锁,调度状态等信息;相关表操作在类StdJDBCDelegate中,相关sql语句在StdJDBCConstants中; 1.qrtz_blob_triggers 自定义的trigg…

阅读全文 »

Spring整合Quartz分布式调度

前言 为了保证应用的高可用和高并发性,一般都会部署多个节点;对于定时任务,如果每个节点都执行自己的定时任务,一方面耗费了系统资源, 另一方面有些任务多次执行,可能引发应用逻辑问题,所以需要一个分布式的调度系统,来协调每个节点执行定时任务。 Spring整合Quartz Quartz是一个成熟的任务调度系统,Spring对Quartz做了兼容,方便开发,下面看看具体如何整合: 1.Maven依赖文件 主要就是Spring相关库、quartz库以及mysql驱动库,注:分布式调度需要用到数据库,这里选用mysql; 2.配置job 提供了两种方式来配置job,分别是:MethodInvokingJ…

阅读全文 »

一次排查多线程引发Java DNS缓存的Bug

问题描述 最近通知应用在近三个月内出现过2次DNS缓存的问题,第一次在重启之后一直没有出现过问题,所以也没有去重视,但是最近又出现过一次,看来很有必要彻底排查一次;具体的错误日志如下: 具体表现就是出现此异常之后连续的出现大量此异常,同时系统节点不可用; 问题分析 1.既然InetAddress$Cache.put报空指针,那就具体看一下源代码: 报空指针的的地方就是entry.expiration,也就是说从cache取出来的entry为null,可以查看cache写入的地方: 每次都是new一个CacheEntry然后再put到cache中,不会写入null进去;此时猜测是多线程引发的问题…

阅读全文 »

Mysql批量插入分析

前言 最近发现几个项目中都有批次插入数据库的功能,每个项目中批次插入的写法有一些差别,所以本文打算对Mysql的批次插入做一个详细的分析。 准备 1.jdk1.7,mysql5.6.38 2.准备库和表 测试与分析 下面准备几种插入的方式来分析优劣: 1.Statement插入方式 准备数据,然后通过Statement方式插入数据,插入10000条数据大概在6秒多左右,同时可以监控服务器数据包; 监控命令: 日志如下: 以上截取了其中一条插入语句的数据包日志,详细的数据包可以通过如下命令监控: 详细日志: 可以发现每个sql语句包前面都有一个select.@@session.tx_read_o…

阅读全文 »

Demo之Mycat读写分离

前言 数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能;对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,其中包含两个步骤,其一是数据源的主从同步,其二是sql的读写分发;而Mycat不负责任何数据的同步,具体的数据同步还是依赖Mysql数据库自身的功能。 Mysql主从复制 准备两台主机,安装相同版本的Mysql数据库,下面准备配置Mysql的主从复制配置: 1.配置Master 配置my.ini或者my.conf如下: server-id:一般设置为IP,注意要唯一;binlog_format:设置binlog的格式;…

阅读全文 »

Demo入门Mycat

前言 Mycat是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里; 下面将从Mycat提供的demo来简单分析一下: 准备 1.Jdk1.7.0_80 2.Mysql 5.5 3.Mycat-server-1.6-release http://dl.mycat.io/1.6-…

阅读全文 »

HTTPS分析与实战

名称解释 https:一种安全的http协议,因此可以称为安全的超文本传输协议,https提出在http和tcp之间添加一层加密层(SSL层),这一层负责数据的加密和解密。 数字证书:简称CA,它由权威机构给某网站颁发的一种认可凭证,是被浏览器所认可的,当然证书也可以自己生成,但是这样就不被浏览器所认可,想想如果自己随便生成一个证书就被浏览器认为是安全的,那也挺可怕的;最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名,证书都有一个有效期。 数字签名:就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。 对称加密:又叫…

阅读全文 »