电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Spring boot基于ScheduledFuture實現定時任務

瀏覽:15日期: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
相關文章:
主站蜘蛛池模板: 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 钢制暖气片散热器_天津钢制暖气片_卡麦罗散热器厂家 | 内窥镜-工业内窥镜厂家【上海修远仪器仪表有限公司】 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 四川成人高考_四川成考报名网 | 喷砂机厂家_自动除锈抛丸机价格-成都泰盛吉自动化喷砂设备 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 江苏皓越真空设备有限公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 防伪溯源|防窜货|微信二维码营销|兆信_行业内领先的防伪防窜货数字化营销解决方案供应商 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | 不锈钢电动球阀_气动高压闸阀_旋塞疏水调节阀_全立阀门-来自温州工业阀门巨头企业 | 精准猎取科技资讯,高效阅读科技新闻_科技猎| 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 北京公积金代办/租房发票/租房备案-北京金鼎源公积金提取服务中心 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 潜水搅拌机-双曲面搅拌机-潜水推进器|奥伯尔环保 | 智慧旅游_智慧景区_微景通-智慧旅游景区解决方案提供商 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 公交驾校-北京公交驾校欢迎您!| 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | 电子天平-华志电子天平厂家 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 伸缩器_伸缩接头_传力接头-巩义市润达管道设备制造有限公司 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 无锡市珂妮日用化妆品有限公司|珂妮日化官网|洗手液厂家 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 |