千寻

道路很长, 开始了就别停下!

0%

简介:

  • 开源的任务调度框架,提供了强大的调度机制
  • 接口扩展性好,接入简单
  • 支持调度运行环境的持久化机制

基础结构:

  • Job

    是一个接口,内部只有一个方法 public void execute(JobExecutionContext context) throws JobExecutionException,开发者在方法体内实现自己的业务逻辑,JobExecutionContext提供了调度上下文的各种信息。

  • JobDetail

    描述Job的实现类及其他静态信息,如Job名称、描述、关联监听器等信息,运行时通过newInstance()的反射机制实例化Job

  • Trigger

    描述触发Job执行的时间规则,主要有SimpleTrigger和CronTrigger两个子类。当仅需触发一次或以固定时间间隔周期执行,SimpleTrigger是最合适的。如果是定义各种复杂的时间规则,CronTrigger比较合适。

  • Scheduler

    表示Quartz的独立运行容器,Trigger和JobDetail可以注册到Scheduler中,两者在Scheduler中有各自的组和名称。一个Job可以对应多个Trigger,而一个Trigger只能对应一个Job。

常用的时间表达式:

表达式 说明
0 0 12 * * ? 每天12:00运行
0 15 10 ? * * 每天10:15运行
0 15 10 * * ? 每天10:15运行
0 15 10 * * ? * 每天10:15运行
0 15 10 * * ? 2016 在2016年每天10:15
0 * 14 * * ? 每天14点到15点之间每分钟运行一次,开始14:00,结束于14:59
0 0/5 14 * * ? 每天14点到15点之间每5分钟运行一次,开始于14:00,结束于14:55
0 0/5 14,18 * * ? 每天14点到15点之前每5分钟运行一次,另外每天18点到19点每5分钟也运行一次
0 0-5 14 * * ? 每天14:00到14:05,每分钟运行一次
0 15 10 ? * MON-FRI 每周一、二、三、四、五的10:15分运行
0 15 10 15 * ? 每月15日10:15运行
0 15 10 L * ? 每月最后一天的10:15运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
说明:

第一位:秒
第二位:分
第三位:时
第四位:日
第五位:月
第六位:星期
第七位:年(可选)

符号:
(*) 表示对应时间域的每一个时刻,比如* 在分钟字段时,表示每一分钟
(?)只有在日期和星期字段中使用,无特殊含义,相当于点位符
(-) 表示范围,比如小时字段中使用9-11,表示9点到11点,即9、10、11
(,)表示一个列表值,比如星期字段中使用“MON,WEN,FRI”表示星期一、星期三和星期五
(/)x/y表示一个等步长序列,x为起始值,y为步长,比如0/15表示0、15、30、45
(L)只在日期和星期字段中使用,L在日期字段,表示这个月份的最后一天,比如一月的31号;如果用在星期中,表示星期六。

pom依赖

1
2
3
4
5
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>

代码示例:

1. 调度工厂配置,里面注册了所有的trigger触发器

1
2
3
4
5
6
7
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="hotPostsCollectTrigger" />
</list>
</property>
</bean>

SchedulerFactoryBean特点:

  • 以Bean风格的方式为Scheduler提供配置信息
  • 让Scheduler与Spring容器的生命周期建立关联
  • 通过属性配置部分或全部代替Quartz自身的配置文件

2. trigger触发器,包含具体的任务和触发时间规则

1
2
3
4
5
<bean id="hotPostsCollectTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="hotPostsCollectJobDetail" />
<property name="cronExpression" value="0 30 23 * * ?" />
</bean>

3. 编写自己业务的jobdetail类,实现job接口

1
2
3
4
5
6
<bean id="hotPostsCollectJob" class="com.onlyone.bbs.task.job.HotPostsCollectJob" />
<bean id="hotPostsCollectJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="hotPostsCollectJob" />
<property name="targetMethod" value="doHandle" />
<property name="concurrent" value="false" />
</bean>
1
2
3
4
5
6
7
8
9
10
11
12
public class HotPostsCollectJob implements Job {

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 框架默认的接口
}

//也可以自己定义方法,此时需要在JobDetail调用时用targetMethod指定
public void doHandle() {

}
}

简介

commons-codec是Apache下面的用来处理常用的编码方法的工具类包,例如DES、SHA1、MD5、Base64,URL,Soundx等等。 不仅是编码,也可用于解码。

阅读全文 »

简介

封装了一些常用工具类方法,用于IO的各种操作:

  • Utility class ,提供一些静态方法来满足一些常用的业务场景
  • Input , InputStream 和 Reader 实现
阅读全文 »

主要是提供一些基础的操作和处理,归为以下几类:

  • org.apache.commons.lang3(高度重用的Util类,常用的工具类静态方法;重点)

  • org.apache.commons.lang3.builder(忽略)

  • org.apache.commons.lang3.concurrent(忽略)

  • org.apache.commons.lang3.event(忽略)

  • org.apache.commons.lang3.exception(忽略)

  • org.apache.commons.lang3.math(数字类型转换、大小比较、是否数字 等相关工具类;重点)

  • org.apache.commons.lang3.mutable(包装值型变量,为基础数据类型扩展了更多方法)

  • org.apache.commons.lang3.reflect(反射相关,忽略)

  • org.apache.commons.lang3.text(文本相关)

  • org.apache.commons.lang3.time(处理日期和时间的功能;重点)

  • org.apache.commons.lang3.tuple(忽略)

pom依赖

1
2
3
4
5
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>

常用工具类:

内容虽然有点多,但我们使用最多还是一些有用的包含static方法的Util类。

  • StringUtils – 处理String的核心类,提供了相当多的功能;

  • NumberUtils - 类型转换(String->Long);取最大最小值;比较大小。所有操作都不会抛出异常,如果转换不成功返回0,0.0d,0.0f等形式,转换操作也可以指定默认值。

  • DateUtils -日期相关;是否同一天;时间+x;字符串转换成Date

  • ArrayUtils – 用于对数组的操作,如添加、查找、删除、子数组、倒序、元素类型转换等;

  • SystemUtils – 在java.lang.System基础上提供更方便的访问,如用户路径、Java版本、时区、操作系统等判断;

  • WordUtils – 用于处理单词大小写、换行等。

  • StringEscapeUtils – 用于正确处理转义字符,产生正确的Java、JavaScript、HTML、XML和SQL代码;

  • CharRange – 用于设定字符范围并做相应检查;

  • ClassUtils – 用于对Java类的操作,不使用反射;

  • Validate – 提供验证的操作,有点类似assert断言;

参考资料:

https://commons.apache.org/proper/commons-lang/javadocs/api-release/

http://zhoualine.iteye.com/blog/1770014

pom依赖

1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>

一、介绍

fastjson是阿里的一个开源二方库,用于对象和json串之间的转换,是目前Java语言中最快的JSON库。接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。

二、常用的工具类

  • 对象转换为字符串
1
com.alibaba.fastjson.JSON.toJSONString(Object)
  • 字符串反序列化为Object
1
2
3
com.alibaba.fastjson.JSON.parseObject(String, Class<ForumCache>)

// 例子:https://github.com/alibaba/fastjson/wiki/Samples-DataBind
  • 将字符串反序化为List <T>
1
<ForumCache> List<ForumCache> com.alibaba.fastjson.JSONArray.parseArray(String text, Class<ForumCache> clazz)

三、手册

Redis 3.0

  • 实现了Cluster的功能,增删集群节点后会自动的进行数据迁移
  • Redis 集群在线重配置的核心就是将槽从一个节点移动到另一个节点的能力。因为一个哈希槽实际上就是一些键的集合, 所以 Redis 集群在重哈希(rehash)时真正要做的,就是将一些键从一个节点移动到另一个节点。