基于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.mzph.cn/news/789388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MetaGPT教程学习笔记

官方文档&#xff1a; MetaGPT: 多智能体框架 | MetaGPT 学习手册及教程&#xff1a; Docs Docs 第一章 前期准备 安装提供了两种方式&#xff0c;pip和github安装包。 配置也提供了两种方式&#xff0c;执行命令或在config.yaml中修改&#xff0c;需提前获取API key。 …

kubernetes-Pod基于污点、容忍度、亲和性的多种调度策略(二)

Pod调度策略 一.污点-Taint二.容忍度-Tolerations三.Pod常见状态和重启策略1.Pod常见状态2.Pod的重启策略2.1测试Always重启策略2.2测试Never重启策略2.3测试OnFailure重启策略&#xff08;生产环境中常用&#xff09; 一.污点-Taint 在 Kubernetes 中&#xff0c;污点&#x…

基于R、Python的Copula变量相关性分析及AI大模型应用

在工程、水文和金融等各学科的研究中&#xff0c;总是会遇到很多变量&#xff0c;研究这些相互纠缠的变量间的相关关系是各学科的研究的重点。虽然皮尔逊相关、秩相关等相关系数提供了变量间相关关系的粗略结果&#xff0c;但这些系数都存在着无法克服的困难。例如&#xff0c;…

智能电销机器人的功能体现

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;已经深入到各个行业&#xff0c;其中智能电销机器人更是成为电销行业不可或缺的一部分。智能电销机器人采用先进的语音识别和自然语言处理技术&#xff0c;能够实现自动拨打、语音交互、数据记录等功能&#…

Nginx在Kubernetes集群中的进阶应用

简介 在现代DevOps环境中&#xff0c;Nginx作为负载均衡器与Kubernetes的Ingress资源的结合&#xff0c;为应用程序提供了强大的路由和安全解决方案。本文将深入探讨如何利用Nginx的灵活性和功能&#xff0c;实现高效、安全的外部访问控制&#xff0c;以及如何配置Ingress以优…

【MySQL】数据类型(1)

数据类型1 一、整形数据二、位图类型三、浮点类型 一、整形数据 我们的MySQL&#xff0c;有很多的数据类型&#xff0c;其中&#xff0c;我们在建表时&#xff0c;肯定要用到相应的数据类型。 整形有 tinyint, samllint , mediumint, int, bigint。 我们第一眼看上去&#x…

uniapp通过蓝牙传输数据 (安卓)

在uni-app中&#xff0c;可以通过原生插件的方式来实现蓝牙传输数据的功能。以下是一般的步骤&#xff1a; 1. 创建一个原生插件 在uni-app项目的根目录下&#xff0c;创建一个原生插件的目录&#xff0c;比如"uni-bluetooth"。然后在该目录下创建一个"Androi…

python类(对象)之间的关系

在Python中&#xff0c;类&#xff08;对象&#xff09;之间的关系是面向对象编程的核心概念之一。这些关系定义了类&#xff08;及其实例&#xff09;如何相互交互&#xff0c;以及它们如何构成程序的结构。 关联&#xff08;Association&#xff09; 关联是两个类之间的一种…

LeetCode207、210 课程表(图 dfs 拓扑排序)

官方题解主要思想是使用dfs进行拓扑排序。 课程表 class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:edges collections.defaultdict(list) visited [0] * numCourses # 将列表初始化为numCourses个0# result []valid T…

数字化赋能农业:数字乡村促进农业现代化

随着信息技术的迅猛发展&#xff0c;数字化浪潮正以前所未有的速度席卷各行各业&#xff0c;农业领域也不例外。数字乡村战略作为推动农业现代化的重要手段&#xff0c;通过数字化技术的深度应用&#xff0c;为农业生产带来了革命性的变革。本文旨在探讨数字化如何赋能农业&…

经典 topk

347. 前 K 个高频元素 215. 数组中的第K个最大元素 703. 数据流中的第 K 大元素 692. 前K个高频单词 public class Solution {public List<String> topKFrequent(String[

算法学习17:背包问题(动态规划)

算法学习17&#xff1a;背包问题&#xff08;动态规划&#xff09; 文章目录 算法学习17&#xff1a;背包问题&#xff08;动态规划&#xff09;前言一、01背包问题&#xff1a;1.朴素版&#xff1a;&#xff08;二维&#xff09;2.优化版&#xff1a;&#xff08;一维&#xf…

主流公链文章整理

主流公链文章整理 分类文章地址&#x1f349;BTC什么是比特币&#x1f96d;BTCBTC网络是如何运行的&#x1f351;BTC一文搞懂BTC私钥&#xff0c;公钥&#xff0c;地址&#x1f955;ETH什么是以太坊&#x1f336;️基础知识BTC网络 vs ETH网络&#x1f95c;CosmosCosmos介绍&a…

c++对象指针

对象指针在使用之前必须先进行初始化。可以让它指向一个已定义的对象&#xff0c;也可以用new运算符动态建立堆对象。 定义对象指针的格式为&#xff1a; 类名 *对象指针 &对象; //或者 类名 *对象指针 new 类名(参数); 用对象指针访问对象数据成员的格式为&#xff1a…

面向移动设备的实时图像识别技术研究

面向移动设备的实时图像识别技术是一个快速发展的领域&#xff0c;它涉及到计算机视觉、机器学习和硬件优化等多个方面。以下是该领域的一些研究重点和挑战&#xff1a; 研究重点 轻量级网络设计&#xff1a;移动设备计算资源有限&#xff0c;因此研究重点之一是设计轻量级的…

B02、类的加载过程梳理-2

1、类的加载过程&#xff08;生命周期&#xff09; 1.1、过程一&#xff1a;装载&#xff08;Loading&#xff09;阶段 1、过程一都做了什么事&#xff1f; 类的装载&#xff0c;简而言之就是将Java类的字节码文件加载到机器内存中&#xff0c;并在内存中构建出Java类的原型&a…

vscode免费登录ssh ,linux git配置免密码

1、vscode远程ssh免密 在windows下生成密钥 , cmd窗口下执行 ssh-keygen -t rsa 在C:\Users\zhangqiwei\.ssh目录下生成 在linux下面 cd .ssh 创建authorized_keys 文件&#xff0c; 把之前windows下生成的 id_rsa.pub内容复制进去 2、gitlab 配置。 在linux下面 ssh-keygen…

Python字符串操作方法一览表

字符串操作 你患得患失太在意从前又太担心将来&#xff0c;有句话说的好昨天是段历史&#xff0c;明天是个谜团而今天是天赐的礼物 像珍惜礼物那样珍惜今天。—— 龟大仙《功夫熊猫3》 1.字符串连接 例子&#xff1a; str1 "Hello" str2 "World" resul…

在线点餐(源码+文档)

在线点餐系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端主页登录点餐注册个人资料我的 后台管理商品管理分类管理用户管理登录页订单管理分类管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、参考…

应用方案D78040场扫描电路,偏转电流可达1.7Ap-p,可用于中小型显示器

D78040是一款场扫描电路&#xff0c;偏转电流可达1.7Ap-p&#xff0c;可用于中小型显示器。 二 特 点 1、有内置泵电源 2、垂直输出电路 3、热保护电路 4、偏转电流可达1.7Ap-p 三 基本参数 四 应用电路图 1、应用线路 2、PIN5脚输出波形如下&#xff1a;