## 一、概述
實際的業務中,我們會經常遇這樣一種業務場景,它存在處理大量數據等耗時的任務,這些任務必須在某個時段范圍或某些時段范圍被處理,產生結果。從技術角度來看,這種場景如果直接在主業務程序中開發并部署,容易導致業務應用系統的耦合以及由于突發的大計算量導致的主業務運行不穩定。
基于這種技術和運維的考慮,基于技術平臺,我們研發了自主的調度容器組件來解決這種應用需求。

## 二、技術特性
與主應用可分離獨立運行;
技術平臺所有基層設施可全面復用;
靈活的調度定制;
可在主應用中監控運行;
可靠的異常處理和干預機制;
與外部業務系統的集成能力;
## 三、開發教程
平臺對調度服務的支持,提供了一套完整的運行體系;一般分成三層架構,包括job、manger和logic(考慮事務的靈活性,增加transactionalapi層);
調用關系如:Job--->Manager--->Logic--->transactionalapi;
開發工作,也就是針對上述邏輯代碼及配置文件(一般復用業務的applicationContext-*.xml配置文件);
以下舉例,從零開始,在既有項目中,開發一個job的完整過程;
### **job**
```
public class ComputeDynamicStoreJob extends UniframeworkTimerJob
{
@Override
public void doBusinessLogic(JobExecution jobexecution) throws Exception
{
ComputeDynamicStoreLogic.execute((JobManager) getJobManager("noTransactionJobManager"), jobexecution);
}
@Override
public long getDelayTime()
{
return MINUTE * 1;
}
@Override
public long getPeriodTime()
{
return MINUTE * 2;
}
@Override
public boolean multiInstanceEnabled()
{
return false;
}
@Override
public boolean scheduleEnabled()
{
return true;
}
@Override
public String desc()
{
return "計算動態庫存";
}
@Override
public String allowedIps()
{
return null;
}
}
```
| 方法 | 用途 | 說明 |
| --- | --- | --- |
| doBusinessLogic| 核心業務邏輯 |這里是job中執行業務邏輯的代碼入口|
| getDelayTime | 設定執行延遲時間 |設定時間之后,調度才啟動|
| getPeriodTime| 設定執行間隔時間 |設定調度的間隔時間|
| multiInstanceEnabled| 是否支持同時多個實例允許 |一般設置為false|
| scheduleEnabled| 是否啟用 |僅啟用才會加載|
| desc| 當前調度的描述信息 |描述信息 |
| allowedIps| 設定允許執行當前調度的IP |如果當前僅部署在一臺服務器,則可設置為null
### **logic/transactionalapi**
這里是業務的核心代碼,含logic及transactionalapi;
ComputeDynamicStoreLogic :
```
public class ComputeDynamicStoreLogic extends JobLogicSupport
{
public static void execute(JobManager manager, JobExecution jobexecution) throws Exception
{
ComputeDynamicStoreApi api = getJobLogicTransactionalApi("computeDynamicStoreApi");
api.doProcess(manager, material, jobexecution);
}
}
```
ComputeDynamicStoreApi :
```
public class ComputeDynamicStoreApi extends JobLogicTransactionalApi
{
public void doProcess(JobManager manager, DataMaterial material, JobExecution jobexecution) throws Exception
{
//真正核心的業務代碼
}
}
```
### **manager**
```
public class JobManager extends JobManagerSupport
{
//定義項目級的JobManager
}
```
這個代碼,在既有項目中,不需要再額外開發,全項目共享;
### **配置文件**
1、上述幾個核心文件,transactionalapi必須配置到applicationContext-*.xml(可在項目工程中,任選一個一定被加載的applicationContext-*.xml文件)中,才能生效;
例如:
```
<bean id="computeDynamicStoreApi" parent="BaseServiceProxy">
<property name="target">
<bean class="com.erp.common.job.logic.transactionalapi.ComputeDynamicStoreApi"></bean>
</property>
</bean>
```
2、為了jobserver能正常加載上述配置,需要將配置applicationContext-*.xml設置到uniframework.properties的server.jobserver.loadedctx,取名為僅僅取applicationContext-之后的名稱,如:applicationContext-card.xml,則取名為card,如果有多個,則用|分開;
例如:
```
server.jobserver.loadedctx = card|nav
```
### **打包部署**
到這里,一個完整的業務job,就全部開發完畢,打包部署,即可運行;
>[danger]
> 1、一般的,每個工程,都會有一個業務代碼以及配置文件的jar包,比如,unerp4job.jar,包里面包含了工程所有的源碼及配置文件;
> 2、那么,在開發完畢,就把**所有**的工程文件重新打一個unerp4job.jar包,即可;
> 3、將該包替換掉jobserver/lib中的同名文件,重啟即可;
>
更具體的信息參考:[調度服務器](../../%E4%BA%A7%E5%93%81%E5%AE%9E%E6%96%BD/%E7%B3%BB%E7%BB%9F%E5%8D%87%E7%BA%A7/%E8%B0%83%E5%BA%A6%E6%9C%8D%E5%8A%A1%E5%99%A8.md)
- 前言
- 01、系統平臺
- 系統管理
- 組織類型
- 單位管理
- 基本功能
- SAAS功能
- 組織管理
- 角色管理
- 人員管理
- 賬號管理
- 賬戶體系
- 賬號綁定
- 賬號鎖定
- 團隊管理
- 模板管理
- 補丁管理
- 字段管理
- 靜態字典
- 動態字典
- 系統配置
- 菜單配置
- 路由配置
- 編碼規則
- 訪問控制
- 系統參數
- 字典配置
- 參數定義
- 參數配置
- 屬性定義
- 屬性設置
- 樹形定義
- 樹形設置
- 系統監控
- 業務維護
- 工作監控
- 調度監控
- 導入監控
- 日志管理
- 在線監控
- 附件管理
- 附件監控
- 附件應用
- 附件授權
- 上傳監控
- 字段監控
- 系統提醒
- 場景配置
- 事件監控
- 提醒記錄
- 事件歷史
- 日期設置
- 節假日期
- 工作時間
- 日歷編制
- 工作日歷
- 開放平臺
- 微信應用
- 配置信息
- 更新菜單
- 釘釘應用
- 配置信息
- 開放服務
- 應用設置
- 服務管理
- 請求監控
- 請求跟蹤
- 移動應用
- 發布管理
- 導航菜單
- 個人管理
- 個人資料
- 內部消息
- 短信中心
- 流程管理
- 流程定義
- 流程環節
- 處理人
- 流程提醒
- 流程簽收
- 流程目錄
- 流程微調
- 轉移動作
- 定義校驗
- 流程綁定
- 流程實體設定
- 單業務多流程
- 動態表單綁定
- 環節字段設定
- 轉移路由設定
- 流程監控
- 流程催辦
- 流程會話
- 流程啟動
- 通用待辦
- 流程驅動
- 通用已辦
- 示范實例
- 流程啟動
- 流程待辦
- 流程已辦
- 常見問題
- 表單管理
- 預留字段
- 字段定義
- 業務應用
- 動態輔表
- 輔表定義
- 輔表應用
- 輔表監控
- 動態主表
- 主表定義
- 業務定義
- 元數據
- 產生機制
- 應用場景
- 02、技術平臺
- 重要組件
- 表單引擎
- 流程引擎
- 基礎設施
- 系統安全
- 服務集成
- 核心組件
- 核心平臺
- 調度容器
- 代碼調試
- 相關配置
- 常見問題
- 多線程
- 工作容器
- 開放服務
- 富客戶端
- 代理容器
- https
- SSLPinning
- 03、手機應用
- 參數配置
- 技術平臺
- 功能設計
- 系統功能
- 應用升級
- 業務模塊
- 04、微信應用
- 參數配置
- 多公眾號
- 技術平臺
- 業務功能
- 平臺功能
- 微信客服
- 微信公號
- 05、開放服務
- 接入示例
- 實施方案
- nginx安裝
- nginx配置
- nginx運行
- nginx限流
- 實現方案
- 業務操作
- 代碼示意
- 06、常見問題
- 性能優化
- 啟動優化
- 解決方案
- 實體操作沖突
- 算法說明
- 檢驗算法
- 注意事項
- 瀏覽器
- 插件
- 郵箱配置
- 系統維護
- 維護日志
- 維護腳本
- 開發環境
- 07、版權信息
- 平臺版權
- 產品版權
- 后記