当前位置: 首页 > news >正文

基于springboot实现定时任务,并且添加Event事件处理机制

1、基于Spring-Event增加事件处理机制

import org.bson.Document;
import org.springframework.context.ApplicationEvent;/*** 基于Spring-Event增加事件处理机制* @create: 2024/4/1-13:33*/
public class SysProductConfigEvent   extends ApplicationEvent {// 数据配置private Document configDoc;public SysProductConfigEvent(Document source) {super(source);this.configDoc = source;}public Document getConfigDoc() {return configDoc;}public void setConfigDoc(Document configDoc) {this.configDoc = configDoc;}
}

2、定时任务

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Lists;
import com.google.common.collect.Multiset;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.UpdateOneModel;
import com.skybird.iot.addons.oemSystem.backend.jdo.Procedure;
import com.skybird.iot.addons.sysConfig.product.backend.event.SysProductConfigEvent;
import com.skybird.iot.addons.sysConfig.product.backend.jdo.QProductConfig;
import com.skybird.iot.addons.sysConfig.product.backend.listener.SysProductConfigListener;
import com.skybird.iot.base.utils.DBUtils;
import com.skybird.iot.base.utils.DocuLib;
import com.skybird.iot.base.utils.StringLib;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;/*** 产品调度器*/
@Component
public class SysProductConfigScheduler implements ApplicationListener<SysProductConfigEvent> {// Logger打印日志对象private static final Logger LOGGER = LoggerFactory.getLogger(SysProductConfigListener.class.getName());@Override public void onApplicationEvent(SysProductConfigEvent event) {Document configDoc = event.getConfigDoc();taskExecute();LOGGER.info("configDoc:{}", configDoc);}/* 定时任务 */@Scheduled(fixedRate = 500000L)public void taskExecute(){// 数据同步datasync();}private synchronized void datasync() {System.out.println("数据同步成功");}

3、数据保存接口触发案例

@PostMapping("/save")
public CheckMessage save(@RequestParam("data") String data) {Document entity = DocuLib.parseDecode(data);String id = DocuLib.getID(entity);Document filter = DocuLib.newDoc();filter.put("code", DocuLib.getCode(entity));if (StrUtil.isNotEmpty(id)) {filter.put("id", DocuLib.newDoc("$ne", id));}long count = DBUtils.count(QProductConfig.collectionName, filter);if (count > 0) {return CheckMessage.newInstance().setSuccess(false).addMessage("产品编码已存在");}if (StrUtil.isEmpty(id)) {entity.put("create_time", DateUtil.date());DBUtils.insert(QProductConfig.collectionName, entity);} else {Document query = DocuLib.newDoc("id", id);DBUtils.updateOne(QProductConfig.collectionName, query, DocuLib.new$Set(entity));}// 增加事件推送,推进后直接触发定时任务进行数据同步SpringUtil.publishEvent(new SysProductConfigEvent(new Document()));return CheckMessage.newInstance();
}

 

http://www.lryc.cn/news/330852.html

相关文章:

  • 深入理解数据结构(1):复杂度详解
  • kette介绍-Step之Merge Join
  • 通俗易懂:MySQL中如何设置只读实例并确保数据一致性?
  • 一文了解Java核心知识——线程池
  • Redis热点Key问题分析与解决
  • 深度学习armv8/armv9 cache的原理
  • Python基础之pandas:文件读取与数据处理
  • 基于Springboot旅游网站管理系统设计和实现
  • 深度解析C语言——预处理详解
  • idea2023.2.1 java项目-web项目创建-servlet类得创建
  • Ollama教程——入门:开启本地大型语言模型开发之旅
  • 基于PHP的新闻管理系统(用户发布版)
  • 基础篇3 浅试Python爬虫爬取视频,m3u8标准的切片视频
  • Adaboost集成学习 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测)
  • MySQL两表联查之分组成绩第几问题
  • 每日一题(leetcode2952):添加硬币最小数量 初识贪心算法
  • [Errno 2] No such file or directory: ‘g++‘
  • go的通信Channel
  • 手写红黑树【数据结构】
  • [蓝桥杯练习]通电
  • 安全算法 - 摘要算法
  • 操作系统:动静态库
  • 车载电子电器架构 —— 局部网络管理汇总
  • 网络安全 | 什么是DDoS攻击?
  • [Godot] 3D拾取
  • 知识融合:知识图谱构建的关键技术
  • 外贸建站:WordPress搭建外贸独立站零基础自建站完整教程(2024)
  • 【教程】Kotlin语言学习笔记(五)——Lambda表达式与条件控制
  • C++的并发世界(三)——线程对象生命周期
  • SAD法(附python实现)和Siamese神经网络计算图像的视差图