11.6添加外部中断钩子

dev
xiaohuo 8 months ago
parent e52a5cd73b
commit ba849694f1
  1. 6
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/ScheduleRulesMapper.java
  2. 57
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleShutdownHook.java
  3. 7
      ALOps_sys_backend/alops-system/src/main/resources/mapper/system/ScheduleRulesMapper.xml

@ -16,6 +16,12 @@ public interface ScheduleRulesMapper
{ {
/**
* status 1 5 的记录更新为 3
* @return 更新的记录数
*/
int updateStatusFrom1And5To3();
public List<ScheduleRules> selectList(); public List<ScheduleRules> selectList();
public List<ScheduleRules> selectListOne(); public List<ScheduleRules> selectListOne();

@ -0,0 +1,57 @@
package com.alops.system.service.impl;
import com.alops.system.mapper.ScheduleRulesMapper;
import com.alops.system.service.IAlertSenderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ScheduleShutdownHook {
private static final Logger log = LoggerFactory.getLogger(ScheduleShutdownHook.class);
@Autowired
private ScheduleRulesMapper scheduleRulesMapper;
@Autowired
private IAlertSenderService iAlertSenderService;
private static ScheduleShutdownHook instance;
@PostConstruct
public void init() {
instance = this;
registerShutdownHook();
}
private void registerShutdownHook() {
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
log.info("检测到应用关闭,开始更新任务状态...");
updateInterruptedStatus();
}));
}
private void updateInterruptedStatus() {
try {
// 将所有状态为1(执行中)、5(等待中)的任务更新为3(执行失败)
int affectedRows = scheduleRulesMapper.updateStatusFrom1And5To3();
log.info("成功更新 {} 个任务状态为中断", affectedRows);
// 发送站内信
if (affectedRows > 0) {
iAlertSenderService.sendInternalMessage(
"系统中断",
"采集任务被外部中断,已更新" + affectedRows + "个任务状态",
"2"
);
}
} catch (Exception e) {
log.error("中断处理失败: {}", e.getMessage(), e);
// 备用方案:直接输出到控制台
System.err.println("中断处理失败: " + e.getMessage());
}
}
}

@ -42,6 +42,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, rule_name, rule_type, frequency, gather_time, start_time, end_time, status,created_at ,created_by from schedule_rules select id, rule_name, rule_type, frequency, gather_time, start_time, end_time, status,created_at ,created_by from schedule_rules
</sql> </sql>
<update id="updateStatusFrom1And5To3">
UPDATE schedule_rules
SET status = 3
WHERE status IN (1, 5)
</update>
<select id="selectList" resultMap="ScheduleRulesResult"> <select id="selectList" resultMap="ScheduleRulesResult">
SELECT * SELECT *
FROM schedule_rules FROM schedule_rules

Loading…
Cancel
Save