框架底层守护线程异常处理逻辑优化,避免极端情况下因Error导致调度终止、丢失问题。

2.5.0
xuxueli 10 months ago
parent 7dc8c7a915
commit 267c1dd956

@ -2401,10 +2401,11 @@ public void execute() {
### 7.36 版本 v2.5.0 Release Notes[规划中]
- 1、【优化】部分系统日志优化提升可读性
- 2、[规划中]升级springboot3.x解决2.x老版本漏洞类问题。注意springboot3.x依赖jdk17。
- 3、[规划中]安全功能增强通讯加密参数改用加密数据避免AccessToken明文 降低token泄漏风险。
- 4、[规划中]登陆态Token声称逻辑优化混淆登陆时间属性降低token泄漏风险。
- 1、【优化】框架底层守护线程异常处理逻辑优化避免极端情况下因Error导致调度终止、丢失问题。
- 2、【优化】部分系统日志优化提升可读性
- 3、[规划中]升级springboot3.x解决2.x老版本漏洞类问题。注意springboot3.x依赖jdk17。
- 4、[规划中]安全功能增强通讯加密参数改用加密数据避免AccessToken明文 降低token泄漏风险。
- 5、[规划中]登陆态Token声称逻辑优化混淆登陆时间属性降低token泄漏风险。
### TODO LIST
- 1、调度隔离调度中心针对不同执行器各自维护不同的调度和远程触发组件。

@ -65,7 +65,7 @@ public class JobCompleteHelper {
// wait for JobTriggerPoolHelper-init
try {
TimeUnit.MILLISECONDS.sleep(50);
} catch (InterruptedException e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -92,7 +92,7 @@ public class JobCompleteHelper {
}
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
}
@ -100,7 +100,7 @@ public class JobCompleteHelper {
try {
TimeUnit.SECONDS.sleep(60);
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -127,7 +127,7 @@ public class JobCompleteHelper {
monitorThread.interrupt();
try {
monitorThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}

@ -71,7 +71,7 @@ public class JobFailMonitorHelper {
}
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
}
@ -79,7 +79,7 @@ public class JobFailMonitorHelper {
try {
TimeUnit.SECONDS.sleep(10);
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -102,7 +102,7 @@ public class JobFailMonitorHelper {
monitorThread.interrupt();
try {
monitorThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}

@ -87,7 +87,7 @@ public class JobLogReportHelper {
}
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(">>>>>>>>>>> xxl-job, job log report thread error:{}", e);
}
@ -121,7 +121,7 @@ public class JobLogReportHelper {
try {
TimeUnit.MINUTES.sleep(1);
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -144,7 +144,7 @@ public class JobLogReportHelper {
logrThread.interrupt();
try {
logrThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}

@ -107,14 +107,14 @@ public class JobRegistryHelper {
XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().update(group);
}
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(">>>>>>>>>>> xxl-job, job registry monitor thread error:{}", e);
}
}
try {
TimeUnit.SECONDS.sleep(RegistryConfig.BEAT_TIMEOUT);
} catch (InterruptedException e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(">>>>>>>>>>> xxl-job, job registry monitor thread error:{}", e);
}
@ -138,7 +138,7 @@ public class JobRegistryHelper {
registryMonitorThread.interrupt();
try {
registryMonitorThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}

@ -11,7 +11,6 @@ import org.slf4j.LoggerFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
@ -44,7 +43,7 @@ public class JobScheduleHelper {
try {
TimeUnit.MILLISECONDS.sleep(5000 - System.currentTimeMillis()%1000 );
} catch (InterruptedException e) {
} catch (Throwable e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
@ -150,7 +149,7 @@ public class JobScheduleHelper {
// tx stop
} catch (Exception e) {
} catch (Throwable e) {
if (!scheduleThreadToStop) {
logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread error:{}", e);
}
@ -160,21 +159,21 @@ public class JobScheduleHelper {
if (conn != null) {
try {
conn.commit();
} catch (SQLException e) {
} catch (Throwable e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
}
try {
conn.setAutoCommit(connAutoCommit);
} catch (SQLException e) {
} catch (Throwable e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
}
try {
conn.close();
} catch (SQLException e) {
} catch (Throwable e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
@ -185,7 +184,7 @@ public class JobScheduleHelper {
if (null != preparedStatement) {
try {
preparedStatement.close();
} catch (SQLException e) {
} catch (Throwable e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
@ -200,7 +199,7 @@ public class JobScheduleHelper {
try {
// pre-read period: success > scan each second; fail > skip this period;
TimeUnit.MILLISECONDS.sleep((preReadSuc?1000:PRE_READ_MS) - System.currentTimeMillis()%1000);
} catch (InterruptedException e) {
} catch (Throwable e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
@ -227,7 +226,7 @@ public class JobScheduleHelper {
// align second
try {
TimeUnit.MILLISECONDS.sleep(1000 - System.currentTimeMillis() % 1000);
} catch (InterruptedException e) {
} catch (Throwable e) {
if (!ringThreadToStop) {
logger.error(e.getMessage(), e);
}
@ -255,7 +254,7 @@ public class JobScheduleHelper {
// clear
ringItemData.clear();
}
} catch (Exception e) {
} catch (Throwable e) {
if (!ringThreadToStop) {
logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread error:{}", e);
}
@ -269,7 +268,7 @@ public class JobScheduleHelper {
ringThread.start();
}
private void refreshNextValidTime(XxlJobInfo jobInfo, Date fromTime) throws Exception {
private void refreshNextValidTime(XxlJobInfo jobInfo, Date fromTime) {
try {
Date nextValidTime = generateNextValidTime(jobInfo, fromTime);
if (nextValidTime != null) {
@ -283,7 +282,7 @@ public class JobScheduleHelper {
logger.error(">>>>>>>>>>> xxl-job, refreshNextValidTime fail for job: jobId={}, scheduleType={}, scheduleConf={}",
jobInfo.getId(), jobInfo.getScheduleType(), jobInfo.getScheduleConf());
}
} catch (Exception e) {
} catch (Throwable e) {
// generateNextValidTime error, stop job
jobInfo.setTriggerStatus(0);
jobInfo.setTriggerLastTime(0);
@ -312,7 +311,7 @@ public class JobScheduleHelper {
scheduleThreadToStop = true;
try {
TimeUnit.SECONDS.sleep(1); // wait
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
if (scheduleThread.getState() != Thread.State.TERMINATED){
@ -320,7 +319,7 @@ public class JobScheduleHelper {
scheduleThread.interrupt();
try {
scheduleThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}
@ -339,7 +338,7 @@ public class JobScheduleHelper {
if (hasRingData) {
try {
TimeUnit.SECONDS.sleep(8);
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}
@ -348,7 +347,7 @@ public class JobScheduleHelper {
ringThreadToStop = true;
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
if (ringThread.getState() != Thread.State.TERMINATED){
@ -356,7 +355,7 @@ public class JobScheduleHelper {
ringThread.interrupt();
try {
ringThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}

@ -93,7 +93,7 @@ public class JobTriggerPoolHelper {
try {
// do trigger
XxlJobTrigger.trigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam, addressList);
} catch (Exception e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
} finally {

@ -89,14 +89,14 @@ public class EmbedServer {
} catch (InterruptedException e) {
logger.info(">>>>>>>>>>> xxl-job remoting server stop.");
} catch (Exception e) {
} catch (Throwable e) {
logger.error(">>>>>>>>>>> xxl-job remoting server error.", e);
} finally {
// stop
try {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
} catch (Exception e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}
@ -200,7 +200,7 @@ public class EmbedServer {
default:
return new ReturnT<String>(ReturnT.FAIL_CODE, "invalid request, uri-mapping(" + uri + ") not found.");
}
} catch (Exception e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
return new ReturnT<String>(ReturnT.FAIL_CODE, "request error:" + ThrowableUtil.toString(e));
}

@ -53,12 +53,12 @@ public class ExecutorRegistryThread {
} else {
logger.info(">>>>>>>>>>> xxl-job registry fail, registryParam:{}, registryResult:{}", new Object[]{registryParam, registryResult});
}
} catch (Exception e) {
} catch (Throwable e) {
logger.info(">>>>>>>>>>> xxl-job registry error, registryParam:{}", registryParam, e);
}
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -69,7 +69,7 @@ public class ExecutorRegistryThread {
if (!toStop) {
TimeUnit.SECONDS.sleep(RegistryConfig.BEAT_TIMEOUT);
}
} catch (InterruptedException e) {
} catch (Throwable e) {
if (!toStop) {
logger.warn(">>>>>>>>>>> xxl-job, executor registry thread interrupted, error msg:{}", e.getMessage());
}
@ -89,7 +89,7 @@ public class ExecutorRegistryThread {
} else {
logger.info(">>>>>>>>>>> xxl-job registry-remove fail, registryParam:{}, registryResult:{}", new Object[]{registryParam, registryResult});
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.info(">>>>>>>>>>> xxl-job registry-remove error, registryParam:{}", registryParam, e);
}
@ -97,7 +97,7 @@ public class ExecutorRegistryThread {
}
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -119,7 +119,7 @@ public class ExecutorRegistryThread {
registryThread.interrupt();
try {
registryThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}

@ -81,7 +81,7 @@ public class JobLogFileCleanThread {
}
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -90,7 +90,7 @@ public class JobLogFileCleanThread {
try {
TimeUnit.DAYS.sleep(1);
} catch (InterruptedException e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}

@ -76,7 +76,7 @@ public class TriggerCallbackThread {
doCallback(callbackParamList);
}
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -90,7 +90,7 @@ public class TriggerCallbackThread {
if (callbackParamList!=null && callbackParamList.size()>0) {
doCallback(callbackParamList);
}
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -111,7 +111,7 @@ public class TriggerCallbackThread {
while(!toStop){
try {
retryFailCallbackFile();
} catch (Exception e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -119,7 +119,7 @@ public class TriggerCallbackThread {
}
try {
TimeUnit.SECONDS.sleep(RegistryConfig.BEAT_TIMEOUT);
} catch (InterruptedException e) {
} catch (Throwable e) {
if (!toStop) {
logger.error(e.getMessage(), e);
}
@ -139,7 +139,7 @@ public class TriggerCallbackThread {
triggerCallbackThread.interrupt();
try {
triggerCallbackThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}
@ -149,7 +149,7 @@ public class TriggerCallbackThread {
triggerRetryCallbackThread.interrupt();
try {
triggerRetryCallbackThread.join();
} catch (InterruptedException e) {
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}
@ -173,7 +173,7 @@ public class TriggerCallbackThread {
} else {
callbackLog(callbackParamList, "<br>----------- xxl-job job callback fail, callbackResult:" + callbackResult);
}
} catch (Exception e) {
} catch (Throwable e) {
callbackLog(callbackParamList, "<br>----------- xxl-job job callback error, errorMsg:" + e.getMessage());
}
}

Loading…
Cancel
Save