How to Re‑trigger a Stalled Spring Scheduled Task with Arthas

This article explains how to diagnose and manually re‑execute a Spring @Scheduled task that fails to send notifications by using Arthas to obtain the ApplicationContext, invoke the bean method, and reveals that a missing timeout in Hutool caused the original hang.

Java Architecture Diary
Java Architecture Diary
Java Architecture Diary
How to Re‑trigger a Stalled Spring Scheduled Task with Arthas

Background

Recently an intern was asked to replace a shell script that checks connectivity to a target website with Java code.

<ol>
<li><code>#!/bin/bash</code></li>
<li><code>URL="https://www.baidu"</code></li>
<li><code>HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`</code></li>
<li><code>#echo $HTTP_CODE</code></li>
<li><code>if [ $HTTP_CODE != '200' ]; then</code></li>
<li><code>curl 'https://oapi.dingtalk.com/robot/send?access_token=xx' \</code></li>
<li><code>-H 'Content-Type: application/json' \</code></li>
<li><code>-d '{"msgtype": "text",</code></li>
<li><code>        "text": {</code></li>
<li><code>             "content": "百度平台状态不正常,请注意!"</code></li>
<li><code>        },</code></li>
<li><code>        "isAtAll": true</code></li>
<li><code>      }'</code></li>
<li><code>fi</code></li>
</ol>

Implementation

Using Spring Task

<ol>
<li><code>@Scheduled(cron = "0 0 0/1 * * ? ")</code></li>
<li><code>public void startSchedule(){</code></li>
<li><code>    log.info("开始执行定时任务 ,检测百度网站连通性");</code></li>
<li><code>    try{</code></li>
<li><code>        HttpResponse response = HttpRequest.get("").execute();</code></li>
<li><code>        if(HttpStatus.HTTP_OK != response.getStatus()){
            this.send2DingTalk(response.getStatus());
        }</code></li>
<li><code>        log.info("请求百度成功,返回报文:{}", response.body());</code></li>
<li><code>    }catch(HttpException e){</code></li>
<li><code>        log.error("请求异常百度:{}", e);
        this.send2DingTalk(e.getMessage());
    }</code></li>
<li><code>    log.info("执行检测百度网站连通任务完毕");</code></li>
<li><code>}</code></li>
</ol>

Problem Description

The task runs hourly on a server, but the Java code never sends the DingTalk notification; logs show only the start message.

Logs show the start message but no end message, suggesting the task is stuck.

Need a way to trigger the failure path quickly for debugging.

Spring Task has no UI or API to invoke manually.

Reproducing the Issue with Arthas

Obtain the Spring ApplicationContext and invoke the startSchedule method directly.

Identify the Monitoring Point

Spring MVC requests go through RequestMappingHandlerAdapter and its invokeHandlerMethod.

The class contains getApplicationContext() to retrieve the context.

@Nullable
public final ApplicationContext getApplicationContext() throws IllegalStateException{
    if(this.applicationContext == null && this.isContextRequired()){
        throw new IllegalStateException("ApplicationObjectSupport instance ["+this+"] does not run in an ApplicationContext");
    }else{
        return this.applicationContext;
    }
}

Execute any request to capture the target RequestMappingHandlerAdapter and then call getApplicationContext().

Arthas tt Command to Get ApplicationContext

Run

tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod

to trace the method.

After a normal web request, the trace captures the target bean.

Then execute an OGNL expression to invoke the scheduled bean:

tt -i 1000 -w 'target.getApplicationContext().getBean("baiduSchedule").startSchedule()'

The task is re‑triggered.

Root cause: the Hutool HTTP utility used in the script lacked a timeout, causing an indefinite wait and preventing the catch block from executing.

Summary

Do not run such operations in production; the article only provides a proof‑of‑concept.

The core technique is using Arthas to fetch the Spring ApplicationContext and invoke a bean method.

Arthas is an open‑source Java diagnostic tool from Alibaba, widely used by developers.

Follow us for more practical Java EE examples.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

javaspringSpring BoottroubleshootingdiagnosticsArthasscheduled-task
Java Architecture Diary
Written by

Java Architecture Diary

Committed to sharing original, high‑quality technical articles; no fluff or promotional content.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.