BDF2中的JOB是指在应用服务端定义一些可以周期性执行的动作,这就是JOB。BDF2中的JOB是在扩展QUARTZ的基础之上实现,但在编写及管理JOB时并不需要我们具备QUARTZ的相关知识,BDF2-JOB模块提供了完备的JOB编写、配置及运行控制功能,可最大限度降低JOB编写、配置及管理的复杂度。
要使用BDF2-JOB模块,如果您采用的是Dynamic Web Project这种传统类型的Web应用项目,那就比较费劲了,我们需要自己到http://nexus.bsdn.org上找到BDF2-JOB模块需要jar,再下载相关依赖的jar,再放置到我们的Dynamic Web Project类型的项目当中;或者您可以到我们提供的在线项目创建向导当中,选择项目类型为Dynamic Web Project,再勾选我们需要的BDF2-JOB模块,最后点击下载,这样创建的项目中既包含BDF2-JOB模块的jar也包含这个模块在运行是所需要的第三方jar。但如果您是采用Maven来管理我们的项目,那么添加BDF2-JOB模块就非常简单,我们需要做的就是打开pom.xml文件,在其中添加下面的dependency。
<dependency> <groupId>com.bstek.bdf2</groupId> <artifactId>bdf2-job</artifactId> <version>2.0.0</version> </dependency>
当前是2.0.0版本,后续随着功能的增加,版本号应该就会大于2.0.0。
项目配置好之后,接下就可以在eclipse中运行项目,启动项目时,可以看到在控制台会出现下面的异常:
Caused by: java.lang.RuntimeException: Job module need a [com.bstek.bdf2.job.service.IJobDataService] interface implementation at com.bstek.bdf2.job.view.calendar.CalendarMaintain.afterPropertiesSet(CalendarMaintain.java:102) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1545) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483) ... 23 more
从异常的提示消息可以看出,使用BDF2-JOB模块,我们需要编写一个com.bstek.bdf2.job.service.IJobDataService接口的实现类,并将其配置到Spring当中,这个接口类的源码如下:
package com.bstek.bdf2.job.service; import java.util.List; import com.bstek.bdf2.job.model.JobDefinition; /** * @author Jacky.gao * @since 2013-3-10 */ public interface IJobDataService { String getCompanyId(); List<JobDefinition> filterJobs(List<JobDefinition> jobs); }
可以看到这个接口有两个方法:第一个getCompanyId方法需要我们返回当前采用的公司ID,同样这个是为基于SAAS模式的应用服务的,如果您的应用采用的是非SAAS模式,那么在这个方法里返回一个固定的字符串即可;第二个方法是filterJobs,它的作用是根据系统信息对当前要加载的Job进行过滤,当然如果您没什么需要过滤的,那么直接返回系统给出的job就行。下面是这个接口的简单实现:
package test; import java.util.List; import com.bstek.bdf2.job.model.JobDefinition; import com.bstek.bdf2.job.service.IJobDataService; public class TestJobDataService implements IJobDataService { @Override public List<JobDefinition> filterJobs(List<JobDefinition> jobs) { return jobs; } @Override public String getCompanyId() { return "bstek"; } }
IJobDataService接口的实现类编写好之后,需要将其配置到Spring环境当中,让其成为一个标准的Spring Bean,在配置时不需要为这个Bean指定ID。
再次启动我们的项目,可以发现项目已经可以正常启动了。
在BDF2-JOB模块当中,提供了针对JOB定义与管理,JOB运行服务监控等相关功能,这些功能都是通过可视化页面来实现的,所以如果您在使用BDF2-JOB模块时,又使用了BDF2-CORE模块,那么可以在登录之后访问generate.system.menu.action这个用于初始化菜单的URL,因为我们加入了BDF2-JOB模块,所以这个模块下包含的URL会自动创建出来,创建好的导航菜单如下图所示:
到这里,JOB模块的安装与配置就完成了,下面我们来看看JOB模块提供了哪些属性允许我们覆盖:
属性名 | 类型 | 默认值 | 描述 |
---|---|---|---|
bdf2.scanJobCronExpression | String | 0 0/10 * * * ? | 利用JOB模块管理JOB时,系统每隔多长时间对调整的JOB进行扫描加载,这里默认是每天从第0分钟开始,每隔10分钟扫锚一次变更信息,也就是第0分钟扫描、第10分钟扫描、第20分钟扫描、第30分钟扫描、第40分钟扫描、第50分钟扫描、第0分钟扫描...... |
bdf2.jobDataSourceName | String | 空 | Job模块采用的数据源名称,默认为空,表示采用默认数据源。 |
bdf2.schedulerConfigPropertiesFile | String | classpath:com/bstek/bdf2/job/config/bdf2.quartz.properties | Quartz启动时相关配置参数文件所在位置,一般情况我们是不需要覆盖这个属性,额外定义属性文件的。 |
bdf2.jobApplicationName | String | 空 | Job模块所在应用的名称,该属性主要为用于JOB集群模块(bdf2-job-daemon)服务。 |
bdf2.runJobInCurrentInstance | boolean | true | 当前项目是否运行JOB,默认值为true,表示运行JOB,否则则不运行,这个属性同样是为JOB集群模块(bdf2-job-daemon)服务。单实例意义不大。 |
bdf2.jobThreadCount | int | 10 | JOB服务在运行时准备多少个线程来运行用户配置的JOB,默认值为10,差不多可以运行100个JOB左右,按这个标准,您可以根据自己项目中JOB的数量来灵活修改这个属性值,一般情况下,可以满足多数JOB需求,不用修改。 |