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來實現(xiàn)
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()區(qū)查找fetchNotifyUserList出來的userList,最后通過alarmCenter.alarmFailed給指定用戶發(fā)送報警信息
小結
UserService提供了save及fetchNotifyUserList方法,基于UserInfoRepository來實現(xiàn);InstanceManager的alert會根據jobInfo.getNotifyUserIds()區(qū)查找fetchNotifyUserList出來的userList,最后通過alarmCenter.alarmFailed給指定用戶發(fā)送報警信息。
以上就是PowerJob的UserService工作流程源碼解讀的詳細內容,更多關于PowerJob UserService的資料請關注腳本之家其它相關文章!
相關文章
IntelliJ IDEA 安裝教程2019.09.23(最新版)
本文通過圖文并茂的形式給大家介紹了IntelliJ IDEA 安裝教程2019.09.23最新版,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
SpringCloud協(xié)同開發(fā)實現(xiàn)方法淺析
好幾個人同時開發(fā)同一個服務上的不同模塊,導致你需要調試的接口總是被路由到別人的服務上,非常影響調試的效率,而且人越多越難受,總是請求不到自己的服務,這篇文章主要介紹了SpringCloud協(xié)同開發(fā)實現(xiàn)方法2022-12-12
使用@PropertySource讀取配置文件通過@Value進行參數(shù)注入
這篇文章主要介紹了使用@PropertySource讀取配置文件通過@Value進行參數(shù)注入,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
關于spring中單例Bean引用原型Bean產生的問題及解決
這篇文章主要介紹了關于spring中單例Bean引用原型Bean產生的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
AbstractProcessor擴展MapStruct自動生成實體映射工具類
這篇文章主要為大家介紹了AbstractProcessor擴展MapStruct自動生成實體映射工具類實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

