分类:编程语言

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进去;此时猜测是多线程引发的问题…

阅读全文 »

HTTPS分析与实战

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

阅读全文 »

Evernote(印象笔记)备份本机剪切板数据

前言 最近同学推荐了一款叫Ditto的软件,用来记录用户的剪贴板数据,包括:文字,图片,文件路径;windows系统本身只能保留最近的一次的剪贴板数据,所以有时候这个功能还是挺有用的;唯一不足的就是不能多端同步,因为一直用印象笔记,所以打算用印象笔记来备份本机剪切板数据,而且印象笔记也提供了强大的搜索功能。 准备 1.申请印象笔记 API Key 印象笔记本身提供了对外的api接口,我们可以申请API Key,地址:https://dev.yinxiang.com/doc/,获取API Key即可,如下图: 其中要注意的是应用的权限:基本权限和完全权限;基本权限包括创建笔记,列出笔记等;完全权…

阅读全文 »

HttpClient4基于shadowsocks-netty的Socks代理

前言 最近想批量下载一些国外网站的视频,之前写过一个代理程序shadowsocks-netty,打算直接 用它来当作客户端代理程序,而HttpClient4也支持Socks代理;所有准备用HttpClient4来访问国外网站和视频资源 HttpClient4版本 访问网站 设置代理ip和port分别是:localhost和1080 访问国外网站hostname为:www.google.com 具体代码如下: 以上代码是Httpclient提供的实例,稍作修改; 先启动shadowsocks-netty 然后运行ClientExecuteSOCKS 1.结果报如下错误: 可以观察shadowso…

阅读全文 »

Redis实现参数的集中式管理

系列文章 Zookeeper实现参数的集中式管理 JMS实现参数的集中式管理 Redis实现参数的集中式管理 前言 上一篇文件JMS实现参数的集中式管理中使用JMS作为中间层,利用的JMS的发布订阅功能实现了对参数的集中式管理;同样分布式缓存Redis也提供了类似的 发布订阅功能,并且Redis本身提供了缓存和持久化的功能,本文将介绍通过Redis实现简单的参数集中式管理。 Maven引入 Spring相关的jar引入参考上一篇文章 目标 1.可以同时配置监听多个节点如/app1,/app2; 2.希望只需要配置如/app1,就能够监听其子节点如/app1/modual1以及子节点的子节点如/…

阅读全文 »