色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Spring boot基于ScheduledFuture實(shí)現(xiàn)定時(shí)任務(wù)

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

一、 背景

接上一篇,完成存儲(chǔ)過程的動(dòng)態(tài)生成后,需要構(gòu)建定時(shí)任務(wù)執(zhí)行存儲(chǔ)過程

二、 環(huán)境

1.此隨筆內(nèi)容基于spring boot項(xiàng)目

2.數(shù)據(jù)庫為mysql 5.7.9版本

3.jdk 版本為1.8

三、 內(nèi)容

1、定義接口和接口參數(shù)bean;

1)在上一篇博客bean 的基礎(chǔ)上把接口配置參數(shù)bean修改一下,添加一個(gè)配置參數(shù)值和排序字段;在添加一個(gè)監(jiān)測(cè)項(xiàng)的bean,想查看其他的bean信息,請(qǐng)移步

@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; // 標(biāo)準(zhǔn)值 private Integer fre_num; private String frequency; private String status; private String warnType; private String warn_date_num;// 監(jiān)測(cè)頻次 //此處省略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; //參數(shù)名稱 private String explain_info; //參數(shù)描述 private String type;// 輸入輸出類型 private String paraType; // 參數(shù)類型 private Integer paraLen;private Integer paraValue; // 參數(shù)值private Integer order_num; // 排序字段 //此處省略get、set…}

2、定義ScheduledFuture定時(shí)任務(wù)

1) 添加接口

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

2) 編寫實(shí)現(xiàn)類

@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>>(); // 新建任務(wù)信息集合/** * 初始化監(jiān)測(cè)項(xiàng) * * @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; }/** * 配置任務(wù)信息 * * @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;// 監(jiān)測(cè)任務(wù) List<QtInterfaceParameter> para = qtInterfaceParameterRepository.QueryInfoByInterId(InterList.get(0).getId()); // 查找參數(shù)信息 List<String> map = new ArrayList<>(para.size()); if (para.size() > 0) { // 參數(shù)集合for (QtInterfaceParameter pa : para) { for (int item = 1; item <= para.size(); item++) { if (item == pa.getOrder_num()) { // 根據(jù)字段排序來設(shè)置參數(shù)值的順序 map.add(pa.getPara_value()); // 設(shè)置值 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()));// 初始化任務(wù),第二個(gè)參數(shù)是Cron表達(dá)式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 += ' 監(jiān)測(cè)項(xiàng):' + qt.getProName() + ' 監(jiān)測(cè)頻次字段為空,不能執(zhí)行計(jì)劃!'; } } else { msg += ' 監(jiān)測(cè)項(xiàng):' + qt.getProName() + ' 沒有查找到接口配置信息'; } } else { msg += ' 監(jiān)測(cè)項(xiàng):' + qt.getProName() + ' 已經(jīng)啟動(dòng),請(qǐng)不要重復(fù)啟動(dòng)。'; } return msg;}}

3) 構(gòu)建任務(wù)處理線程類

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('執(zhí)行了過程:' +proName+'當(dāng)前參數(shù)順序:'+bf.toString()+ ' 當(dāng)前時(shí)間 '+ sdf.format(new Date())); } @Override public void run() { try { executeInternal(); // 調(diào)用執(zhí)行 } catch (JobExecutionException e) { e.printStackTrace(); } }

4) 此處是用的List保存的任務(wù)信息,在項(xiàng)目重啟之后這個(gè)東西就沒了,也就是說定時(shí)任務(wù)就全丟了,so,這里考慮使用數(shù)據(jù)庫來持久化保存調(diào)度任務(wù)信息, 或者在項(xiàng)目啟動(dòng)的時(shí)候?qū)懸粋€(gè)配置來調(diào)用啟動(dòng)定時(shí)任務(wù)

@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');// 根據(jù)狀態(tài)查詢需要啟動(dòng)的監(jiān)測(cè)項(xiàng) if(itemList.size()>0){ // 存在需要啟動(dòng)的檢測(cè)項(xiàng)For(MonitorWarnItem qt: itemList) testService.initMonitor(qt);// 啟動(dòng)任務(wù)列表和消息 } return ''; } @Override public void run(String... args) throws Exception { setTask (); }}

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 国产人做人爱视频精品 | 国产精品久久久精品三级 | 亚洲黄色免费网址 | 国产精品性视频免费播放 | 亚洲男人天堂av | 国产在线播放成人免费 | a级网站在线观看 | 97人摸人人澡人人人超一碰 | 美女三级在线 | 国产真实女人一级毛片 | 亚洲精品欧美精品一区二区 | 日本精品视频一区二区三区 | 免费播放欧美毛片 | 久久精品人人爽人人爽快 | 日韩美女一级片 | 久久综合狠狠综合久久综合88 | 成年女人免费观看视频 | 成人国产在线不卡视频 | 亚洲欧美在线免费观看 | 三级视频在线观看 | 精品国产一二三区在线影院 | 欧美特黄一级片 | 国产90后美女露脸在线观看 | 天天碰夜夜操 | 精品久久久久久影院免费 | 日韩美女在线看免费观看 | 欧美亚洲日本国产 | 国产猛烈无遮掩视频免费网站男女 | 精品一久久 | 在线中文字日产幕 | 怡红院成人永久免费看 | 精品久久香蕉国产线看观看亚洲 | 欧美成人免费看片一区 | 国产成人综合久久亚洲精品 | 成人久久精品一区二区三区 | 全部孕妇毛片丰满孕妇孕交 | 欧美成人精品高清在线播放 | 国产精品久久大陆 | 9丨精品国产高清自在线看 ⅹxx中国xxx人妖 | 黄色毛片视频校园交易 | 国内精品久久久久久影院8f |