PowerJob的UserService工作流程源码解读
作者: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<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给指定用户发送报警信息。
以上就是PowerJob的UserService工作流程源码解读的详细内容,更多关于PowerJob UserService的资料请关注脚本之家其它相关文章!