4.BDF2-JOB

2023-07-03 17:12 更新
BDF2中的JOB是指在應(yīng)用服務(wù)端定義一些可以周期性執(zhí)行的動(dòng)作,這就是JOB。BDF2中的JOB是在擴(kuò)展QUARTZ的基礎(chǔ)之上實(shí)現(xiàn),但在編寫及管理JOB時(shí)并不需要我們具備QUARTZ的相關(guān)知識(shí),BDF2-JOB模塊提供了完備的JOB編寫、配置及運(yùn)行控制功能,可最大限度降低JOB編寫、配置及管理的復(fù)雜度。

要使用BDF2-JOB模塊,如果您采用的是Dynamic WebProject這種傳統(tǒng)類型的Web應(yīng)用項(xiàng)目,那就比較費(fèi)勁了,我們需要自己到http://nexus.bsdn.org上找到BDF2-JOB模塊需要jar,再下載相關(guān)依賴的jar,再放置到我們的Dynamic Web Project類型的項(xiàng)目當(dāng)中;或者您可以到我們提供的在線項(xiàng)目創(chuàng)建向?qū)М?dāng)中,選擇項(xiàng)目類型為DynamicWebProject,再勾選我們需要的BDF2-JOB模塊,最后點(diǎn)擊下載,這樣創(chuàng)建的項(xiàng)目中既包含BDF2-JOB模塊的jar也包含這個(gè)模塊在運(yùn)行是所需要的第三方j(luò)ar。但如果您是采用Maven來管理我們的項(xiàng)目,那么添加BDF2-JOB模塊就非常簡單,我們需要做的就是打開pom.xml文件,在其中添加下面的dependency。
BDF2-JOB模塊的dependency
<dependency>
 <groupId>com.bstek.bdf2</groupId>
 <artifactId>bdf2-job</artifactId>
 <version>2.0.0</version>
</dependency>
當(dāng)前是2.0.0版本,后續(xù)隨著功能的增加,版本號(hào)應(yīng)該就會(huì)大于2.0.0。
項(xiàng)目配置好之后,接下就可以在eclipse中運(yùn)行項(xiàng)目,啟動(dòng)項(xiàng)目時(shí),可以看到在控制臺(tái)會(huì)出現(xiàn)下面的異常:
Job模塊運(yùn)行時(shí)拋出的異常
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(Ab
stractAutowireCapableBeanFactory.java:1545)
 at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(Abstrac
tAutowireCapableBeanFactory.java:1483)
 ... 23 more
從異常的提示消息可以看出,使用BDF2-JOB模塊,我們需要編寫一個(gè)com.bstek.bdf2.job.service.IJobDataService接口的實(shí)現(xiàn)類,并將其配置到Spring當(dāng)中,這個(gè)接口類的源碼如下:
IJobDataService接口源碼
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);
}
可以看到這個(gè)接口有兩個(gè)方法:第一個(gè)getCompanyId方法需要我們返回當(dāng)前采用的公司ID,同樣這個(gè)是為基于SAAS模式的應(yīng)用服務(wù)的,如果您的應(yīng)用采用的是非SAAS模式,那么在這個(gè)方法里返回一個(gè)固定的字符串即可;第二個(gè)方法是filterJobs,它的作用是根據(jù)系統(tǒng)信息對當(dāng)前要加載的Job進(jìn)行過濾,當(dāng)然如果您沒什么需要過濾的,那么直接返回系統(tǒng)給出的job就行。下面是這個(gè)接口的簡單實(shí)現(xiàn):
IJobDataService實(shí)現(xiàn)類示例
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接口的實(shí)現(xiàn)類編寫好之后,需要將其配置到Spring環(huán)境當(dāng)中,讓其成為一個(gè)標(biāo)準(zhǔn)的SpringBean,在配置時(shí)不需要為這個(gè)Bean指定ID。
再次啟動(dòng)我們的項(xiàng)目,可以發(fā)現(xiàn)項(xiàng)目已經(jīng)可以正常啟動(dòng)了。

在BDF2-JOB模塊當(dāng)中,提供了針對JOB定義與管理,JOB運(yùn)行服務(wù)監(jiān)控等相關(guān)功能,這些功能都是通過可視化頁面來實(shí)現(xiàn)的,所以如果您在使用BDF2-JOB模塊時(shí),又使用了BDF2-CORE模塊,那么可以在登錄之后訪問generate.system.menu.action這個(gè)用于初始化菜單的URL,因?yàn)槲覀兗尤肓薆DF2-JOB模塊,所以這個(gè)模塊下包含的URL會(huì)自動(dòng)創(chuàng)建出來,創(chuàng)建好的導(dǎo)航菜單如下圖所示:

到這里,JOB模塊的安裝與配置就完成了,下面我們來看看JOB模塊提供了哪些屬性允許我們覆蓋:
屬性名類型默認(rèn)值描述
bdf2.scanJobCronExpression
String
0 0/10 * * * ?
利用JOB模塊管理JOB時(shí),系統(tǒng)每隔多長時(shí)間對調(diào)整的JOB進(jìn)行掃描加載,這里默認(rèn)是每天從第0分鐘開始,每隔10分鐘掃錨一次變更信息,也就是第0分鐘掃描、第10分鐘掃描、第20分鐘掃描、第30分鐘掃描、第40分鐘掃描、第50分鐘掃描、第0分鐘掃描......
bdf2.jobDataSourceNameStringJob模塊采用的數(shù)據(jù)源名稱,默認(rèn)為空,表示采用默認(rèn)數(shù)據(jù)源。
bdf2.schedulerConfigPropertiesFileStringclasspath:com/bstek/bdf2/job/config/bdf2.quartz.propertiesQuartz啟動(dòng)時(shí)相關(guān)配置參數(shù)文件所在位置,一般情況我們是不需要覆蓋這個(gè)屬性,額外定義屬性文件的。
bdf2.jobApplicationNameStringJob模塊所在應(yīng)用的名稱,該屬性主要為用于JOB集群模塊(bdf2-job-daemon)服務(wù)。
bdf2.runJobInCurrentInstance
boolean
true
當(dāng)前項(xiàng)目是否運(yùn)行JOB,默認(rèn)值為true,表示運(yùn)行JOB,否則則不運(yùn)行,這個(gè)屬性同樣是為JOB集群模塊(bdf2-job-daemon)服務(wù)。單實(shí)例意義不大。
bdf2.jobThreadCount
int
10
JOB服務(wù)在運(yùn)行時(shí)準(zhǔn)備多少個(gè)線程來運(yùn)行用戶配置的JOB,默認(rèn)值為10,差不多可以運(yùn)行100個(gè)JOB左右,按這個(gè)標(biāo)準(zhǔn),您可以根據(jù)自己項(xiàng)目中JOB的數(shù)量來靈活修改這個(gè)屬性值,一般情況下,可以滿足多數(shù)JOB需求,不用修改。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)