BDF2-JOB模块中在定义JOB时,我们遵循标准的Quartz定义JOB的方法,那就是实现org.quartz.Job接口,这样对于那些已经在使用Quartz来定义JOB的用户,就可以无缝将自己经编写好的JOB迁移到BDF2-JOB模块当中来。
下面的代码当中向我们展示了一个实现了org.quartz.Job接口具体JOB实现类:
package test; import java.util.List; import java.util.Map; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import com.bstek.bdf2.core.orm.jdbc.JdbcDao; public class TestJob extends JdbcDao implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap=context.getJobDetail().getJobDataMap(); String targetUser=jobDataMap.getString("targetUser"); String sql="select * from BDF2_USER where USERNAME_=?"; List<Map<String,Object>> users=this.getJdbcTemplate().queryForList(sql, new Object[]{targetUser}); if(users.size()>0){ System.out.println("用户"+targetUser+"的中文名为:"+users.get(0).get("CNAME_")); } } }
从代码中可以看到,这个JOB在运行时从JobDataMap里取出一个用户的用户名参数targetUser,再用这个用户名到数据库中查询这个用户对应的详细信息,如果用户存在就在系统控制台中打印出这个用户的CNAME_属性,也就是它的中文名。
JOB实现类编写好之后,需要将其配置到Spring当中,配置方法如下:
<bean id="testJob" class="test.TestJob"></bean>
JOB编写配置完成之后,接来就可以启动我们的工程,利用BDF2提供的在线配置界面将JOB添加到服务当中。
登录系统,进入“任务调度”菜单,点击其下的“JOB定义”菜单项,如下所示:
点击工具栏上的“添加”按钮,在弹出的窗口中,为新的JOB定义一个名称,在“使用的BeanId”列中,点击选择我们之前配置的JOB的ID,可以看到在弹出的窗口当中,就有我们之前在Spring当中配置的那个testJob对象,如下图所示:
JOB选择完成后,我们就需要定义这个JOB该如何运行,也就是配置下面的“Cron表达式”,点击按钮可以看到一个图形化的Cron表达式配置界面,可以看到这个界面功能是非常完善的,它可以完成95%以上的简单或复杂的Cron表达式配置,如下图所示:
我们这里定义的是让这个JOB从第0秒开始,每隔10秒运行一次,定义完成之后,点击其下方的“生成Cron表达式”按钮,便可生成具体的Cron表达式,同时点击“解析表达式”按钮,可以看到这个Cron表达式最近50次的具体运行时间。
因为我们这个testJob还需要一个名为targetUser的参数,所以在完成JOB本身定义之后,我们还需要为这个JOB定义一个名为targetUser的JOB运行参数,如下图所示:
这样,JOB的所有定义工作都完成了,我们点击工具栏上的“启动任务”按钮,就可以将JOB添加的待运行的JOB队列当中。
之前我们提到,JOB默认的扫描时间为0分钟、10分钟、20分钟......,所以看到点击工具栏上的“启动任务”按钮后,JOB状态为启动中,一旦服务器端时间到达0分钟、10分钟、20分钟......,JOB就会被扫描到,并开始运行。JOB每次运行,系统都会记录它的运行结果:成功还是失败,如果失败还会取出失败的异常并存储下来,如下图所示:
同时每次JOB运行后,我们都可以在控制台看到输出的targetUser用户对应的中文名(如果这个用户存在的话)。
从配置界面当中可以看到,在配置JOB运行时,还可以排除某些运行日期,比如将周末或节假日排除等,对于排除日期的定义是在“节假日设定”页面当中完成的,如下图所示:
从图中可以看到,在定义节假日时可以选择具体类型,目前支持四种类型:星期中的某些天是指一个星期中的某此天;月份中的某些天,是以月份中的天为单位来确定日期;具体日期则是选择具体的年月日;每天都经历的日期,则是让我们选择月份与具体的天,比如定义五一劳动节或十一国庆节等。定义好节假日后,就可以将需要排除的节假日加入到JOB当中,这样一旦时间是这些节假日,JOB就不会执行,否则则执行。
Attachments:
select_job.png (image/png)
cron_config.png (image/png)
job_parameter.png (image/png)
job_his.png (image/png)
calendar_def.png (image/png)