PowerJob的UserService工作流程源码解读

 更新时间:2024年01月23日 09:07:36   作者:codecraft  
这篇文章主要介绍了PowerJob的UserService工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

本文主要研究一下PowerJob的UserService

UserService

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

@Service
public class UserService {
    @Resource
    private 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&lt;UserInfoDO&gt; 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给指定用户发送报警信息。

以上就是PowerJob的UserService工作流程源码解读的详细内容,更多关于PowerJob UserService的资料请关注脚本之家其它相关文章!

相关文章

  • SpringMVC通过拦截器实现IP黑名单

    SpringMVC通过拦截器实现IP黑名单

    这篇文章主要为大家详细介绍了SpringMVC通过拦截器实现IP黑名单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • SpringBoot中使用异步调度程序的高级方法

    SpringBoot中使用异步调度程序的高级方法

    本文主要介绍了SpringBoot中使用异步调度程序的高级方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • IntelliJ IDEA 安装教程2019.09.23(最新版)

    IntelliJ IDEA 安装教程2019.09.23(最新版)

    本文通过图文并茂的形式给大家介绍了IntelliJ IDEA 安装教程2019.09.23最新版,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • mybatis之增删改查

    mybatis之增删改查

    本篇文章主要介绍了Mybatis实现数据的增删改查实例(CRUD),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-07-07
  • SpringCloud协同开发实现方法浅析

    SpringCloud协同开发实现方法浅析

    好几个人同时开发同一个服务上的不同模块,导致你需要调试的接口总是被路由到别人的服务上,非常影响调试的效率,而且人越多越难受,总是请求不到自己的服务,这篇文章主要介绍了SpringCloud协同开发实现方法
    2022-12-12
  • Java数据结构之队列与OJ题

    Java数据结构之队列与OJ题

    这篇文章主要介绍了Java数据结构之队列与OJ题,本文章先是对队列进行介绍,后又介绍了四道OJ相关的题目,来使其深入理解,需要的朋友可以参考下
    2023-01-01
  • 使用@PropertySource读取配置文件通过@Value进行参数注入

    使用@PropertySource读取配置文件通过@Value进行参数注入

    这篇文章主要介绍了使用@PropertySource读取配置文件通过@Value进行参数注入,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 全网最全SpringBoot集成swagger的详细教程

    全网最全SpringBoot集成swagger的详细教程

    swagger是当下比较流行的实时接口文文档生成工具,swagger分为swagger2 和swagger3两个常用版本,二者区别不是很大,主要对于依赖和注解进行了优化,swagger2需要引入2个jar包,swagger3只需要一个,用起来没有什么大的区别,本文给大家详细介绍,感兴趣的朋友一起看看吧
    2022-08-08
  • 关于spring中单例Bean引用原型Bean产生的问题及解决

    关于spring中单例Bean引用原型Bean产生的问题及解决

    这篇文章主要介绍了关于spring中单例Bean引用原型Bean产生的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • AbstractProcessor扩展MapStruct自动生成实体映射工具类

    AbstractProcessor扩展MapStruct自动生成实体映射工具类

    这篇文章主要为大家介绍了AbstractProcessor扩展MapStruct自动生成实体映射工具类实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论