<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 一、概述 實際的業務中,我們會經常遇這樣一種業務場景,它存在處理大量數據等耗時的任務,這些任務必須在某個時段范圍或某些時段范圍被處理,產生結果。從技術角度來看,這種場景如果直接在主業務程序中開發并部署,容易導致業務應用系統的耦合以及由于突發的大計算量導致的主業務運行不穩定。 基于這種技術和運維的考慮,基于技術平臺,我們研發了自主的調度容器組件來解決這種應用需求。 ![](https://img.kancloud.cn/69/bd/69bd9e7f0b94abe6ca9c00589f45e644_1123x794.png) ## 二、技術特性 與主應用可分離獨立運行; 技術平臺所有基層設施可全面復用; 靈活的調度定制; 可在主應用中監控運行; 可靠的異常處理和干預機制; 與外部業務系統的集成能力; ## 三、開發教程 平臺對調度服務的支持,提供了一套完整的運行體系;一般分成三層架構,包括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)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看