昨天师兄说我们的项目要发布了,没想今天就找我,要我把项目发布到服务器上,让我很汗啊。以前没有干过的事情,第一次做还是很多有压力的。幸好师兄详细的给我演示了一遍,很快就了解了。上传的时候只要把文件发到服务器就可以了,然后直接重启就完事了。真的好简单的。
下午的时候因为要准备入库流程的自动化实现,就看了一下基于Java的开源作业调度框架 Quartz 。最新的版本是2.0,不过考虑到稳定性,最后还是选择了1.8.4。了解这种开源的框架一般就是看文档,然后看示例代码。我先看了一下他的 Quick-start-guide ,主要介绍了一下Quartz的压缩包的文件结构。还有就是它的配置文件,这个看上去很简单,不写都是可以的。看完以后大概的了解了一下他的运行机制,也就是基于多线程,因为他的配置文件中需要配置一个threadPool。简单文档看完以后,就去看他的示例了。
官方总共提供了14个例子,这些例子从简单的Hello World,到复杂的集群应用都有讲到。但是其中最核心的有几个部件:
Job 接口: 所有需要Quartz调度的作业都要事先这个接口,这个接口只有一个方法 execute(JobExecutionContext context). 在
context中可以拿到具体的作业对象以及一些参数。Job分为有状态和无状态两种,默认是无状态的。如果想要有状态就要
实现StatefulJob接口。
JobDetail 类: 这个是Job的详细描述,会包括作业的 name, group,具体的类,还有就是作业的数据Map.框架调度就是它
Scheduler/SchedulerFactory : Scheduler接口是Quartz的调度中心了,他的实例化是由工厂方法实现的。常用的工厂方法是
StdSchedulerFactory。常用的方法是 scheduleJob(JobDetail, Trigger) : 添加作业和相应的触发器,
start():开始调度, shutdown(boolean):中止调度。他需要一个布尔值得参数,来指定中止时对正在运行的作业的处理
方式, true:不终止直到所有的作业的完成, false:立刻终止
Trigger 类 : 这个类和数据库中的触发器的概念是一样的,在某个特定的时间触发某个特定的事件。所以Trigger将指定Job的运行
时间、重复次数、重复间隔等一系列的参数。SimpleTrigger和CronTrigger是用的比较多的两个实现类。他们最主要
的不同就是对 运行时间、重复次数、重复间隔的指定方式。SimplerTrigger就是通过参数指定的,很简单也很容易理解。
CronTrigger是通过一种叫 cronExpression的方式实现的,功能强大但也相应的比较难理解。
有了以上的几个最基本的部件,我们就可以构建起一个作业调度程序了,下面是基本的类图:
接下来看一段简单的代码:
首先是 Job:
接下是简单的调度示例:
上面的代码就组成了一个最基本的调度处理。
刚开始学的时候,对cronExpression很不理解。于是在网上转了转,发现了一篇很不错的文章,我就不Copy过来了,想了解的大家可以去看看 Quartz Cron 表达式(时间格式的写法)
同时还有一篇不错的介绍Quartz的文章,比我这里讲的好了不少 Quartz简介
我只是第一天了解Quartz,可能有错误的地方,如有误导,深感抱歉。