日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Spring boot基于ScheduledFuture實現定時任務

瀏覽:33日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩在线欧美| 亚洲神马久久| 亚洲精品少妇| 亚洲三级观看| 欧美一区成人| 免费视频一区二区三区在线观看 | 亚洲在线久久| 久久av在线| 蜜臀久久99精品久久久久宅男| 亚洲一区日韩| 69精品国产久热在线观看| 久久一区视频| 国产字幕视频一区二区| 中文字幕日韩亚洲| 国产欧美二区| av资源亚洲| 日韩一区二区免费看| 五月亚洲婷婷| 久久亚洲人体| 激情婷婷综合| 欧美日韩a区| 快播电影网址老女人久久| 久久久久91| 免费高清在线一区| 国产精品一区免费在线| 四虎国产精品免费观看| 一区免费视频| 美女视频一区在线观看| 午夜视频精品| 久久不见久久见免费视频7| 99成人在线视频| 亚洲日本久久| 色婷婷亚洲mv天堂mv在影片| 国产美女一区| 国产精品扒开腿做爽爽爽软件| 日韩国产一区二区| 少妇精品在线| 超碰成人av| 免费的成人av| 日韩精品诱惑一区?区三区| 蜜桃免费网站一区二区三区| 国内精品麻豆美女在线播放视频| 夜夜嗨一区二区三区| 久久99青青| 亚洲欧美日韩国产一区| 精品女同一区二区三区在线观看| 国产精品女主播一区二区三区| 国产精久久久| 亚洲一区欧美二区| 国产精选在线| 日韩欧美高清一区二区三区| 久久精品二区三区| 日韩福利视频网| 激情欧美国产欧美| 麻豆久久久久久| 蜜桃久久久久久久| 一本大道色婷婷在线| 日韩毛片一区| 韩日一区二区三区| 国产精品毛片一区二区在线看| 在线免费观看亚洲| 99精品电影| 国产一区三区在线播放| 日韩动漫一区| 蘑菇福利视频一区播放| 亚洲夜间福利| 日韩国产欧美| 国产精品激情| 亚洲免费专区| 日韩一级不卡| 亚洲成人精选| 精品捆绑调教一区二区三区| 你懂的国产精品| 欧美日韩国产一区二区在线观看| 国产模特精品视频久久久久| 99久久亚洲精品| 亚洲综合电影| 国产91在线精品| 久久av综合| 久久99影视| 国产日韩一区二区三区在线播放| 国产视频一区免费看| 久久国产日本精品| 日韩一区二区三区免费播放| 国产伊人久久| 成人精品国产亚洲| 麻豆91在线播放| 国产精品s色| 国产精品亚洲产品| 国产人成精品一区二区三| 日本成人在线视频网站| 中文字幕乱码亚洲无线精品一区| 亚洲一区二区三区高清不卡| 免费久久99精品国产自在现线| 好看的亚洲午夜视频在线| 午夜久久黄色| 日韩制服丝袜先锋影音| 亚洲一区日韩在线| 91久久中文| 鲁大师影院一区二区三区| 噜噜噜久久亚洲精品国产品小说| 中文视频一区| 日韩欧美美女在线观看| 奇米色欧美一区二区三区| 日本成人在线不卡视频| 欧美久久久网站| 麻豆精品久久久| 精品一区二区三区的国产在线观看| 精品视频在线你懂得| 麻豆mv在线观看| 91精品一区二区三区综合在线爱 | 青草综合视频| 欧美在线91| 久久三级毛片| 婷婷综合六月| 9久re热视频在线精品| 首页欧美精品中文字幕| 欧美一区二区三区免费看| 精品视频在线观看网站| 999久久久亚洲| 亚洲一区二区免费在线观看| 国产色噜噜噜91在线精品| 高潮久久久久久久久久久久久久| av日韩中文| 性色一区二区| 日韩福利视频网| 精品国产精品国产偷麻豆| 丝袜av一区| 中文字幕日本一区二区| 老牛国内精品亚洲成av人片| 欧美日韩尤物久久| 蜜臀国产一区二区三区在线播放 | 久久精品1区| 在线看片一区| 国产精品精品国产一区二区| 亚洲一级特黄| 色综合视频一区二区三区日韩 | 日韩国产在线不卡视频| 久久精品国产精品亚洲毛片| 成人免费电影网址| 蜜臀精品久久久久久蜜臀| 美女精品一区二区| 韩日一区二区三区| 国产日韩欧美中文在线| 日本蜜桃在线观看视频| 男人的天堂久久精品| 精品国产欧美| 国产精品人人爽人人做我的可爱| 国产乱码精品一区二区三区四区| 国产精品xx| 亚洲精品影视| 亚洲综合电影| 91精品一区| 欧美日韩免费观看一区=区三区| 日韩高清成人在线| 久久久久久黄| 国产精品22p| 蜜桃视频免费观看一区| 精精国产xxxx视频在线播放| 久久国产精品色av免费看| 亚洲性图久久| 精品一区二区三区亚洲 | 国产亚洲一级| 精品一区视频| 日韩欧美久久| 欧美不卡视频| 免费在线亚洲| 欧美一级全黄| 久久不射中文字幕| 999国产精品永久免费视频app| 国产精品极品在线观看| 亚洲理论在线| 免费不卡中文字幕在线| 久久精品九色| 日韩高清不卡一区二区| 亚洲中字黄色| 久久久久亚洲| 成人一区而且| 欧美亚洲综合视频| 午夜亚洲福利在线老司机| 日韩精品久久久久久久电影99爱 | 欧美视频久久| 亚洲深深色噜噜狠狠爱网站| av在线日韩| 日韩综合一区| 国产精品网在线观看| 日日夜夜免费精品视频| 在线综合视频| 亚洲精品2区| 九九精品调教| 日韩免费看片| 国内精品美女在线观看| 国产精品资源| 国产日本亚洲| 日本欧美大码aⅴ在线播放| 丝瓜av网站精品一区二区| 亚洲性视频h| 激情欧美亚洲| 亚洲高清成人| 在线精品视频在线观看高清|