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

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

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

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

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

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

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

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

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

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

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

Loading…
Cancel
Save