聊聊PowerJob的UserService

本文主要研究一下PowerJob的UserService

UserService

tech/powerjob/server/core/service/UserService.java

@Service
public class UserService {@Resourceprivate UserInfoRepository userInfoRepository;/*** 保存/修改 用户* @param userInfoDO user*/public void save(UserInfoDO userInfoDO) {userInfoDO.setGmtCreate(new Date());userInfoDO.setGmtModified(userInfoDO.getGmtCreate());userInfoRepository.saveAndFlush(userInfoDO);}/*** 根据用户ID字符串获取用户信息详细列表* @param userIds 逗号分割的用户ID信息* @return 用户信息详细列表*/public List<UserInfoDO> fetchNotifyUserList(String userIds) {if (StringUtils.isEmpty(userIds)) {return Lists.newLinkedList();}// 去重Set<Long> userIdList = Splitter.on(",").splitToList(userIds).stream().map(Long::valueOf).collect(Collectors.toSet());List<UserInfoDO> res = userInfoRepository.findByIdIn(Lists.newLinkedList(userIdList));res.forEach(x -> x.setPassword(null));return res;}
}

UserService提供了save及fetchNotifyUserList方法,基于UserInfoRepository来实现

UserInfoDO

tech/powerjob/server/persistence/remote/model/UserInfoDO.java

@Data
@Entity
@Table(indexes = {@Index(name = "uidx01_user_info", columnList = "username"),@Index(name = "uidx02_user_info", columnList = "email")
})
public class UserInfoDO {@Id@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")@GenericGenerator(name = "native", strategy = "native")private Long id;private String username;private String password;/*** 手机号*/private String phone;/*** 邮箱地址*/private String email;/*** webHook*/private String webHook;/*** 扩展字段*/private String extra;private Date gmtCreate;private Date gmtModified;
}

UserInfoDO定义了username、email两个唯一键

UserInfoRepository

tech/powerjob/server/persistence/remote/repository/UserInfoRepository.java

public interface UserInfoRepository extends JpaRepository<UserInfoDO, Long> {List<UserInfoDO> findByUsernameLike(String username);List<UserInfoDO> findByIdIn(List<Long> userIds);
}

UserInfoRepository基于JpaRepository,声明了findByUsernameLike、findByIdIn方法

InstanceManager

tech/powerjob/server/core/instance/InstanceManager.java

    private void alert(Long instanceId, String alertContent) {InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId);JobInfoDO jobInfo;try {jobInfo = instanceMetadataService.fetchJobInfoByInstanceId(instanceId);} catch (Exception e) {log.warn("[InstanceManager-{}] can't find jobInfo, alarm failed.", instanceId);return;}JobInstanceAlarm content = new JobInstanceAlarm();BeanUtils.copyProperties(jobInfo, content);BeanUtils.copyProperties(instanceInfo, content);List<UserInfoDO> userList = SpringUtils.getBean(UserService.class).fetchNotifyUserList(jobInfo.getNotifyUserIds());if (!StringUtils.isEmpty(alertContent)) {content.setResult(alertContent);}alarmCenter.alarmFailed(content, AlarmUtils.convertUserInfoList2AlarmTargetList(userList));}

InstanceManager的alert会根据jobInfo.getNotifyUserIds()区查找fetchNotifyUserList出来的userList,最后通过alarmCenter.alarmFailed给指定用户发送报警信息

小结

UserService提供了save及fetchNotifyUserList方法,基于UserInfoRepository来实现;InstanceManager的alert会根据jobInfo.getNotifyUserIds()区查找fetchNotifyUserList出来的userList,最后通过alarmCenter.alarmFailed给指定用户发送报警信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638895.shtml

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

相关文章

RHCE上课笔记(前半部分)

第一部分 网络服务 第一章 例行性工作 1.单一执行的例行性工作 单一执行的例行性工作&#xff08;就像某一个时间点 的闹钟&#xff09;&#xff1a;仅处理执行一次 1.1 at命令&#xff1a;定时任务信息 [rhellocalhost ~]$ rpm -qa |grep -w at at-spi2-core-2.40.3-1.el9.x…

【leetcode题解C++】541.反转字符串II

541. 反转字符串II 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个&#xff0c…

Nacos 在云原生架构下的演进

作者&#xff1a;之卫 背景 Nacos 提供的最核心能力是动态服务发现与动态配置管理能力&#xff0c;在云原生环境下&#xff0c;借助云产品&#xff0c;如 EDAS&#xff08;企业级分布式应用服务&#xff09;平台中&#xff0c;我们可以很轻松地使用 K8s 来托管 Nacos 体系的微…

《WebKit 技术内幕》之六(1): CSS解释器和样式布局

《WebKit 技术内幕》之六&#xff08;1&#xff09;&#xff1a;CSS解释器和样式布局 CSS解释器和规则匹配处于DOM树建立之后&#xff0c;RenderObject树之前&#xff0c;CSS解释器解释后的结果会保存起来&#xff0c;然后RenderObject树基于该结果来进行规范匹配和布局计算。当…

基于 GPT 和 Qdrant DB 向量数据库, 我构建了一个电影推荐系统

电影推荐系统自从机器学习时代开始以来就不断发展&#xff0c;逐步演进到当前的 transformers 和向量数据库的时代。 在本文中&#xff0c;我们将探讨如何在向量数据库中高效存储数千个视频文件&#xff0c;以构建最佳的推荐引擎。 在众多可用的向量数据库中&#xff0c;我们将…

Tomcat的maxParameterCountmaxPostSize参数

Tomcat的maxParameterCount&maxPostSize参数 Tomcat的maxParameterCount&maxPostSize参数1.问题1.1问题现象1.2 参数总结1.3 问题总结 2 Tomcat官网的解释2.1 到https://tomcat.apache.org/找到文档入口2.2 找到文档的Reference2.3 查看配置文件的参数 3 文档看不明白&…

GIS项目实战08:JetBrains IntelliJ IDEA 2022 激活

为什么选择 IntelliJ IDEA 使用编码辅助功能更快地编写高质量代码&#xff0c;这些功能可在您键入时搜索可能的错误并提供改进建议&#xff0c;同时无缝地向您介绍编码、新语言功能等方面的社区最佳实践。 IntelliJ IDEA 了解您的代码&#xff0c;并利用这些知识通过在每种上…

Istio

1、Istio介绍 Istio 是由 Google、IBM 和 Lyft 开源的微服务管理、保护和监控框架。 官网&#xff1a;https://istio.io/latest/zh/ 官方文档&#xff1a;https://istio.io/docs/ 中文官方文档&#xff1a;https://istio.io/zh/docs Github地址&#xff1a;https://github.com…

vectorCast添加边界值分析测试用例

1.1创建项目成功后会自动生成封装好的函数,在这些封装好的函数上点击右键,添加边界值分析测试用例,如下图所示。 1.2生成的用例模版是不可以直接运行的,需要我们分别点击它们,让它们自动生成相应测试用例。如下图所示,分别为变化前和变化后。 1.3点击选中生成的测试用例,…

SpringBoot 源码解析5:ConfigurationClassPostProcessor整体流程和@ComponentScan源码分析

SpringBoot 源码解析5&#xff1a;ConfigurationClassPostProcessor整体流程和ComponentScan源码分析 1. 知道以下几点&#xff0c;读ConfigurationClassPostProcessor源码会更轻松2. 源码解析 ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry2.1 Configur…

100天精通Python(实用脚本篇)——第113天:基于Tesseract-OCR实现OCR图片文字识别实战

文章目录 专栏导读1. OCR技术介绍2. 模块介绍3. 模块安装4. 代码实战4.1 英文图片测试4.2 数字图片测试4.3 中文图片识别书籍分享专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不…

【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 广度优先搜索 状态压缩 LeetCode847 访问所有节点的最短路径 存在一个由 n 个节点组成的无向连通图&#xff0c;图中的节点按从 0 到 n - 1 编号。 给你一个数组 graph 表示这个图。其中&#xff0c;graph[i] 是一个列…

如何用“VMware安装Ubuntu”win11系统?

一、 下载Ubuntu 企业开源和 Linux |Ubuntu的 二、 安装 三、 启动虚拟机 选中Try or Install Ubuntu Server&#xff0c;按回车

数据结构与算法:图

文章目录 图1) 概念有向 vs 无向度权路径环图的连通性 2) 图的表示3) Java 表示4) DFS5) BFS6) 拓扑排序7) 最短路径DijkstraBellman-FordFloyd-Warshall 8) 最小生成树PrimKruskal 图 1) 概念 图是由顶点&#xff08;vertex&#xff09;和边&#xff08;edge&#xff09;组成…

js提取截图中的中文

从图片中提取中文 安装依赖 npm install tesseract.js 编写代码(ocr_example.js) const Tesseract require(tesseract.js); const path require(path); const imagePath path.resolve(__dirname, path/image); Tesseract.recognize(imagePath,chi_sim, { logger: m >…

Mysql学习笔记系列(一)

本次mysql系列不会讲解具体的查询语句&#xff0c;而是放在mysql的一些性能优化和一些特性上&#xff0c;是学习笔记&#xff0c;供大家参考补充。 慢查询 MySQL的慢查询&#xff0c;全名是慢查询日志&#xff0c;是MySQL提供的一种日志记录&#xff0c;用来记录在MySQL中响应…

P8761 [蓝桥杯 2021 国 BC] 大写

[蓝桥杯 2021 国 BC] 大写 题目描述 给定一个只包含大写字母和小写字母的字符串&#xff0c;请将其中所有的小写字母转换成大写字母后将字符串输出。 输入格式 输入一行包含一个字符串。 输出格式 输出转换成大写后的字符串。 样例 #1 样例输入 #1 LanQiao样例输出 #1…

Meta 标签的力量:如何利用它们提高网站的可见性(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

解决 Navicat 在笔记本外接显示器分辨率自适应展示问题

前言 有时候我们使用自己的笔记本电脑会外接一个显示器&#xff0c;但是显示器的分辨率和笔记本又不一样&#xff0c;所以就会导致 Navicat 基于分辨率的问题变得字体很小。具体操作可点击这里&#xff1a; Navicat 分辨率调整

如何在ubuntu22.04安装ROS2

ubuntu22.04安装ROS2 教程 选择对应版本进行安装设置编码添加源安装ROS2设置环境变量 运行ROS2 选择对应版本 通过官方网站&#xff0c;查询Ubuntu与ros对应的版本&#xff0c;版本不一致也会出现安装不成功。 https://wiki.ros.org/ROS/Installation 每一个都可以进行点击&a…