<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之旅 廣告
                ## 一、快速開發 ### **背景** 新版JobServer(基于RayFramework平臺的一套獨立運行容器,與主程序完全分開獨立運行,支持通過協議通訊),我們只需基于業務,分析業務,寫出符合業務需要的job,就完成了調度開發工作,至于容器自身的細節,我們不必去理會,由JobServer平臺自身管理; ### **開發步驟** 1、新建一個job類,繼承自RayPeriodScheduleJobInJobServer(如果您希望不獨立部署,而是合并到appServer中,那么繼承自RayPeriodScheduleJobInAppServer); 2、在void doInRayPeriodJob(SysJobExecution sysjobexecution)方法中實現自己的業務邏輯; 3、為了把業務與技術分離,平臺建議新建一個專用的service類(事務控制在這里),跟在主程序一樣,這里可以使用開發平臺的任何基礎設施;**如果業務比較復雜,比如是循環業務,那么,建議新建一個專業的action類(那么事務從service層就轉移控制在這里),供service調用**; >[info] 注意: > 1、job類中,必須加入注解@Component; > 2、doInRayPeriodJob業務中,可以使用開發平臺的各種基礎設施,跟平臺主程序一樣強大; > 3、到這里,開發就完成了,非常簡單,對不對? ### **參考代碼** Job: ``` @Component public class ScanCardCandidateJob extends RayPeriodScheduleJobInJobServer { @Autowired private ScanCardCandidateService scanCardCandidateService; @Override protected void doInRayPeriodJob(SysJobExecution sysjobexecution, StringBuilder errorMessage) { scanCardCandidateService.scanCandidate(); } @Override protected String allowedIps() { return all; } @Override protected boolean enabled() { return true; } @Override protected long initialDelayInSeconds() { return 1 * minute; } @Override protected String jobDesc() { return "候選卡片處理"; } @Override protected long periodInSeconds() { return 1 * minute; } } ``` Service: ``` @Service public class ScanCardCandidateService extends RayScheduleJobService { @Autowired private CardInfoDao cardInfoDao; @Autowired private CardInfoCandidateDao cardInfoCandidateDao; @Autowired private CardSourceDao cardSourceDao; @Autowired private ScanCardCandidateAction action; public void scanCandidate() { List<CardInfoCandidate> candidates = cardInfoCandidateDao.findAll(); for (CardInfoCandidate candidate : candidates) { action.doAction(candidate); } } } ``` Action: ``` @Component public class ScanCardCandidateAction extends RayScheduleJobAction { @Autowired private CardInfoDao cardInfoDao; @Autowired private CardInfoCandidateDao cardInfoCandidateDao; @Autowired private CardSourceDao cardSourceDao; @Transactional public void doAction(CardInfoCandidate candidate) { try { CardSource cardsource = cardSourceDao.findBySourceName(candidate.getCardSource()); if (cardsource == null) { } CardInfo cardinfo = new CardInfo(); cardinfo.setAccessCode(candidate.getAccessCode()); cardinfo.setCardSource(cardsource.getSourceId()); cardinfo.setCardStatus(CardStatus.initialized); cardinfo.setRealNameStatus(CardRealNameStatus.not_real_named); cardinfo.setCardUserStaff(0L); cardinfo.setIccidCode(candidate.getIccidCode()); cardinfo.setTerminalAgentStaff(0L); cardinfo.setTopAgentStaff(0L); cardinfo.setCardUserStaff(0L); cardinfo.setApiAgentStaff(0L); cardinfo.setUserCode(candidate.getUserCode()); boolean flag = ApiFacade.initOperation(cardinfo); cardInfoDao.save(cardinfo); cardInfoCandidateDao.delete(candidate); } catch (Exception ex) { } } } ``` ## 二、打包部署 這里打包也非常簡單,只需要選擇運行模式為jobserver的打包任務即可; ![](https://img.kancloud.cn/7a/6b/7a6b1ccf3ba3158e1fc9bd1eb1476fa7_1366x736.png) 如何定義呢?可以參考:[后端開發](../../%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91.md)中,打包模式的內容 >[info] 這里的調試,也非常簡單,跟主工程一樣,只要確保run-mode=jobserver,即可; ## 三、支持cron表達式的版本 將繼承的基礎類由*RayPeriodScheduleJobInJobServer*調整為*RayCronScheduleJobInJobServer*,業務方法由doInRayPeriodJob()改為doInRayCronJob(),并額外的增加了一個方法cron(),用途是提供cron表達式; ### **如何定義cron表達式** 字符串以6個空格隔開,分為7個域(其中第7個域是年份,可以留空),每一個域代表一個含義; | 域序號(從左往右)| 域意義 | 取值范圍 |特殊字符 | | --- | --- | --- |--- | | 1 | 秒 | 0-59 | ,-*/ | | 2 | 分 | 0-59 | ,-*/ | | 3 | 小時 | 0-23 | ,-*/ | | 4 | 日期 | 1-31 | ,-*?/LW | | 5 | 月份 | 1-12 或者 JAN-DEC | ,-*/ | | 6 | 星期 | 1-7 或者 SUN-SAT | ,-*?/L# | | 7 | 年份(可選,留空)| 1970~2099 | ,-*/ | 關于特殊字符的含義,如下表所示: | 字符 | 說明 | | --- | --- | | , |表示列出枚舉值,例如:在分域使用5,20,則意味著在5和20分每分鐘觸發一次| | - | 表示范圍,例如在分域使用5-20,表示從5分到20分鐘每分鐘觸發一次 | | * | 表示匹配該域的任意值。假如在分域使用, 即表示每分鐘都會觸發事件 | | / | 表示遞增觸發,然后每隔固定時間觸發一次。例如在分域使用5/20,則意味著5分鐘觸發一次,而25,45等分別觸發一次 | | ? | 表示不指定值,使用的場景為不需要關心當前設置這個字段的值,它只能用在日期和星期兩個域;例如:要在每月的10號觸發一個操作,但不關心是周幾,所以需要周位置的那個字段設置為”?” 具體設置為 0 0 0 10 \* ? | | # | 序號,用于確定每個月第幾個星期幾,只能出現在日期域。例如在周字段上設置”6#3”表示在每月的第三個周六 | | L | 表示最后,只能出現在星期和日期域。如果在星期域使用5L,意味著在最后的一個星期四觸發 | | W | 表示有效工作日(周一到周五),只能出現在日期域,系統將在離指定日期的最近的有效工作日觸發事件。例如:在 日期使用5W,如果5日是星期六,則將在最近的工作日:星期五,即4日觸發。如果5日是星期天,則在6日(周一)觸發;如果5日在星期一到星期五中的一天,則就在5日觸發。另外一點,W的最近尋找不會跨過月份 | | LW | 這兩個字符可以連用,表示在某個月最后一個工作日,即最后一個星期五 | ### **參考代碼** ``` @Component public class TestCronJob extends RayCronScheduleJobInJobServer { @Override protected void doInRayCronJob(SysJobExecution sysjobexecution, StringBuilder errorMessage) throws Exception { //business } @Override protected String allowedIps() { return all; } @Override protected boolean enabled() { return true; } @Override protected String jobDesc() { return "cron的job測試"; } // 每個月1日的23點 @Override protected String cron() { return "* * 23 1 * ? "; } @Override protected long initialDelayInSeconds() { return 0; } @Override protected long periodInSeconds() { return 0; } @Override protected String allowedInstanceIds() { return null; } } ```
                  <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>

                              哎呀哎呀视频在线观看