成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Spring boot基于ScheduledFuture實現定時任務

瀏覽:85日期:2023-09-03 16:10:35

一、 背景

接上一篇,完成存儲過程的動態生成后,需要構建定時任務執行存儲過程

二、 環境

1.此隨筆內容基于spring boot項目

2.數據庫為mysql 5.7.9版本

3.jdk 版本為1.8

三、 內容

1、定義接口和接口參數bean;

1)在上一篇博客bean 的基礎上把接口配置參數bean修改一下,添加一個配置參數值和排序字段;在添加一個監測項的bean,想查看其他的bean信息,請移步

@Entity@Table(name='monitor_warn_item')public class MonitorWarnItem { @Id private String id; private String proName;//名稱 private String rule; private String send_content; private String recommend_value;// 建議值 private String standard_value; // 標準值 private Integer fre_num; private String frequency; private String status; private String warnType; private String warn_date_num;// 監測頻次 //此處省略get、set…} @Entity@Table(name='qt_interface_parameter')public class QtInterfaceParameter { @Id private String id; @Column(name='inter_id') private String interId; private String name; //參數名稱 private String explain_info; //參數描述 private String type;// 輸入輸出類型 private String paraType; // 參數類型 private Integer paraLen;private Integer paraValue; // 參數值private Integer order_num; // 排序字段 //此處省略get、set…}

2、定義ScheduledFuture定時任務

1) 添加接口

public interface TestService { ResultInfo initMonitor(String Id);<br>// 省略之前的...}

2) 編寫實現類

@Servicepublic class TestServiceImpl implements TestService { @Autowired private MonitorWarnItemRepository monitorWarnItemRepository @Autowired private ThreadPoolTaskScheduler threadPoolTaskScheduler; @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() { return new ThreadPoolTaskScheduler(); }List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>(); // 新建任務信息集合/** * 初始化監測項 * * @param Id * @return */@Override@Transactionalpublic ResultInfo initMonitor(String Id) { ResultInfo info = new ResultInfo(); String msg = ''; MonitorWarnItem item = monitorWarnItemRepository.findId(Id); msg =buildTask(item);info.setResult(1);info.setMsg('初始化成功,初始化返回信息:' + msg);System.out.println(msg);// 日志打印return info; }/** * 配置任務信息 * * @param qt * @return */private String buildTask(MonitorWarnItem qt) { String msg = ''; if (IsFure(qt.getId())) { List<QtInterface> InterList = qtInterfaceRepository.QueryInterFaceByItemId(qt.getId()); if (InterList.size() > 0) { Map<String, Object> map_future = new HashMap<>(); ScheduledFuture<?> future;// 監測任務 List<QtInterfaceParameter> para = qtInterfaceParameterRepository.QueryInfoByInterId(InterList.get(0).getId()); // 查找參數信息 List<String> map = new ArrayList<>(para.size()); if (para.size() > 0) { // 參數集合for (QtInterfaceParameter pa : para) { for (int item = 1; item <= para.size(); item++) { if (item == pa.getOrder_num()) { // 根據字段排序來設置參數值的順序 map.add(pa.getPara_value()); // 設置值 item++; } }} } QuartzTaskService service = new QuartzTaskService(InterList.get(0).getName(), map, jdbcTemplate, qt); if (!''.equals(qt.getWarn_date_num()) && qt.getWarn_date_num() != null) {future = threadPoolTaskScheduler.schedule(service, new CronTrigger(qt.getWarn_date_num()));// 初始化任務,第二個參數是Cron表達式if (future != null) { map_future.put('future', future); map_future.put('id', InterList.get(0).getItemId()); map_future.put('status', '0'); mapList.add(map_future);} } else {msg += ' 監測項:' + qt.getProName() + ' 監測頻次字段為空,不能執行計劃!'; } } else { msg += ' 監測項:' + qt.getProName() + ' 沒有查找到接口配置信息'; } } else { msg += ' 監測項:' + qt.getProName() + ' 已經啟動,請不要重復啟動。'; } return msg;}}

3) 構建任務處理線程類

public class QuartzTaskService implements Runnable { private JdbcTemplate jdbcTemplate; private String proName; private List<String> maplist; private MonitorWarnItem item; public QuartzTaskService(String proName,List<String> maplist,JdbcTemplate jdbcTemplate ,MonitorWarnItem item){ this.proName=proName; this.maplist=maplist; this.jdbcTemplate=jdbcTemplate; this.item=item; } protected void executeInternal() throws JobExecutionException { SimpleDateFormat sdf=new SimpleDateFormat('yyyy-MM-dd HH:mm:ss'); StringBuffer bf=new StringBuffer(); bf.append('call '); bf.append(proName); bf.append('('); int i=1; for(String map:maplist){ if(i==maplist.size()){ // 最后一位bf.append('’'+map+'’)'); }else {bf.append('’' + map + '’,'); } i++; } jdbcTemplate.batchUpdate(bf.toString()); System.out.println('執行了過程:' +proName+'當前參數順序:'+bf.toString()+ ' 當前時間 '+ sdf.format(new Date())); } @Override public void run() { try { executeInternal(); // 調用執行 } catch (JobExecutionException e) { e.printStackTrace(); } }

4) 此處是用的List保存的任務信息,在項目重啟之后這個東西就沒了,也就是說定時任務就全丟了,so,這里考慮使用數據庫來持久化保存調度任務信息, 或者在項目啟動的時候寫一個配置來調用啟動定時任務

@Component@Order(1)public class StartTask implements CommandLineRunner { @Autowired private TestService testService; public String setTask(){ Calendar cale = null; cale = Calendar.getInstance(); int year = cale.get(Calendar.YEAR); MonitorWarnItem itemList=testService.QueryByStatus ('1');// 根據狀態查詢需要啟動的監測項 if(itemList.size()>0){ // 存在需要啟動的檢測項For(MonitorWarnItem qt: itemList) testService.initMonitor(qt);// 啟動任務列表和消息 } return ''; } @Override public void run(String... args) throws Exception { setTask (); }}

5)最后附上一個我使用的返回處理類

public class ResultInfo<T> { private Integer result; private String msg; private T rows; private int total;//省略其他處理}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产在线看一区| 国产精品污www在线观看| 精品国产自在久精品国产| 日韩精品亚洲专区| aⅴ色国产欧美| 国产精品久久久久影视| 色综合夜色一区| 3d动漫精品啪啪| 久久不见久久见中文字幕免费| 性色av一区二区怡红| 亚洲精品国产精华液| 亚洲国产一区在线| 亚洲欧美区自拍先锋| 狠狠色狠狠色综合人人| 国产视频一区二区三区在线观看| 成人午夜视频在线| 日韩网站在线看片你懂的| 国内精品国产成人| 欧美卡1卡2卡| 激情国产一区二区| 欧美精品tushy高清| 韩国精品在线观看| 7777精品伊人久久久大香线蕉| 美国欧美日韩国产在线播放| 91久久一区二区| 精品无人码麻豆乱码1区2区 | 精品国内二区三区| 成人黄页在线观看| 久久日韩粉嫩一区二区三区 | 亚洲麻豆av| 一区二区三区精品在线| 国产欧美日韩一区二区三区| 亚洲另类春色校园小说| 亚洲美女黄色| 亚洲成人免费影院| 在线看一区二区| 国产精品一区二区视频| 欧美mv日韩mv| 欧美精品一区二区三区在线看午夜 | 香蕉成人啪国产精品视频综合网| 亚洲在线电影| 日韩和欧美一区二区三区| 一本大道综合伊人精品热热| 奇米影视一区二区三区| 欧美日韩一区三区| 国产精品一区免费在线观看| 欧美zozozo| 欧美在线视频二区| 亚洲日本电影在线| 久久精品一区二区三区中文字幕| 日韩国产欧美在线播放| 欧美日韩一区二区三区在线看| 国产精品一二三区在线| 26uuuu精品一区二区| 国产精品国码视频| 亚洲午夜影视影院在线观看| 91久久精品网| 国产精品亚洲第一| 久久精品亚洲精品国产欧美 | 亚洲精品在线二区| 五月天激情小说综合| 欧美日韩成人在线一区| 91亚洲精品一区二区乱码| 国产精品盗摄一区二区三区| 国产精品丝袜xxxxxxx| 久久99久久99| 久久久久久久综合日本| 亚洲成色精品| 日韩国产高清在线| 日韩欧美在线观看一区二区三区| 欧美精选在线| 天天综合网天天综合色| 日韩午夜精品电影| 伊人久久久大香线蕉综合直播| 亚洲第一二三四区| 日韩免费福利电影在线观看| 亚洲午夜精品福利| 七七婷婷婷婷精品国产| 精品国产伦一区二区三区免费 | 在线播放91灌醉迷j高跟美女 | 国产午夜亚洲精品午夜鲁丝片| 国产精品区免费视频| 国内精品视频一区二区三区八戒| 国产欧美日韩亚州综合| 亚洲一区二区三区涩| 国产精品1区2区3区在线观看| 国产精品天美传媒沈樵| 在线观看91视频| 99re这里只有精品6| 亚洲一区二区三区四区的| 91精品国产品国语在线不卡| 在线播放日韩| 国产美女在线精品| 亚洲视频在线观看三级| 欧美日韩国产经典色站一区二区三区| 亚洲欧美一区二区原创| 日韩精品电影一区亚洲| 国产亚洲精品超碰| 色婷婷亚洲精品| 99re热视频这里只精品| 丝袜美腿亚洲色图| 久久久久99精品一区| 91国内精品野花午夜精品| 色综合一区二区| 免费观看成人av| 亚洲国产精品激情在线观看| 欧美自拍丝袜亚洲| 怡红院精品视频在线观看极品| 蜜桃视频在线观看一区二区| 国产精品久久免费看| 欧美伦理电影网| 国产亚洲欧美一区二区三区| 成人自拍视频在线观看| 午夜精品视频一区| 国产欧美视频一区二区| 欧美日韩激情在线| 日韩视频在线播放| 9i在线看片成人免费| 日本中文字幕一区| 国产精品久久777777| 91精品国产综合久久久久久| 一本一道久久综合狠狠老精东影业 | 国产精品影视在线观看| 亚洲一区二区黄色| 久久婷婷成人综合色| 欧美日韩免费一区二区三区 | 亚洲三级色网| av电影一区二区| 精品在线播放免费| 亚洲一区二区三区美女| 国产欧美一区二区精品性色| 欧美高清激情brazzers| 国产精品试看| 欧美黄色aaaa| 国产伦精品一区二区三区免费 | 丰满亚洲少妇av| 日本中文一区二区三区| 亚洲人成人一区二区在线观看| 日韩一区二区三区电影| 在线观看av一区二区| 国产精品乱看| 在线欧美不卡| 欧美在线日韩| 成人免费va视频| 狠狠狠色丁香婷婷综合激情| 亚洲第一在线综合网站| 国产精品久久久久影院亚瑟| 精品国产欧美一区二区| 欧美美女一区二区三区| 色先锋aa成人| 国产精品乱码一区二区三区| 黄色成人av网站| 欧美一区二区三区免费看| 懂色av中文字幕一区二区三区| 全国精品久久少妇| 亚洲成在线观看| 亚洲黄色尤物视频| 国产精品理论片| 久久久久久97三级| 2023国产精华国产精品| 日韩视频一区二区三区在线播放| 欧美亚洲愉拍一区二区| 久久久久综合一区二区三区| 国产一区二区三区免费不卡| 一区三区视频| 樱桃成人精品视频在线播放| 国模吧视频一区| 午夜天堂精品久久久久| 欧美在线播放| 9i看片成人免费高清| 成人福利视频在线| 成人自拍视频在线| 丁香桃色午夜亚洲一区二区三区| 国产一区二区伦理片| 国产一区二区视频在线播放| 久久99精品国产麻豆婷婷| 日本视频一区二区三区| 日韩制服丝袜av| 日韩不卡一二三区| 日本成人超碰在线观看| 日av在线不卡| 老司机午夜精品| 国内精品久久久久影院薰衣草| 精品一区二区三区久久久| 极品美女销魂一区二区三区| 精久久久久久久久久久| 九色|91porny| 国产伦理精品不卡| 国产传媒日韩欧美成人| 高清beeg欧美| 成人av高清在线| jlzzjlzz欧美大全| 99精品视频一区二区| 午夜日韩激情| 在线看无码的免费网站| av成人免费观看| 六月婷婷一区| 欧美日韩中文另类| 在线成人av影院| 久久影院电视剧免费观看|