Java定时任务手工触发-使用Arthas

1. 前言

在测试环境经常需要手工触发Java应用中的定时任务,如果定时任务没有使用Quartz,Java应用中也没有提供其他方法手工触发定时任务,可以使用Arthas快速实现以上目的。

以下使用Arthas动态触发Java定时任务的前提是:定时任务类为Spring Bean,Java项目中存在公共静态方法可以获取到Spring Context,如以下使用的SpringContextUtil类的getSpringContext()方法,代码见附录。

2. Arthas使用说明

2.1. 官方文档

https://arthas.aliyun.com/doc/quick-start.html

Arthas官方文档中考虑的情况比较多,对于使用Arthas动态触发Java定时任务的需求,只需要按照以下步骤执行即可。

2.2. 安装

可从以下地址下载Arthas压缩包arthas-bin.zip,版本为3.5.1,发布时间为2021年5月13日。

将以上压缩包上传至对应服务器中并解压。

unzip arthas-bin.zip -d arthas-bin

2.3. 启动Arthas

执行解压产生目录中的“sh as.sh”,选择需要attach的Java进程,若只存在一个进程则可直接回车,若存在多个则需要输入对应编号后回车。

3. 使用Arthas动态触发Java定时任务

在启动Arthas后执行以下命令:

ognl '@xxx.SpringContextUtil@getSpringContext().getBean("xxx.xxxTask").startTask()'

以上命令通过SpringContextUtil.getSpringContext()方法获得Spring Context后,获得定时任务对应的Bean,再调用其方法,达到手工触发定时任务的功能。

以上xxx.xxxTask为对应Spring Bean的名称,定时任务执行的方法为“public void startTask()”。

使用以下命令,可以查看全部Spring Bean的名称。

ognl '@xxx.SpringContextUtil@getSpringContext().getBeanDefinitionNames()'

4. 附录

SpringContextUtil类代码如下:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@Lazy(false)
@Component("xxx.SpringContextUtil")
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext springContext;

    public static ApplicationContext getSpringContext() {
        return springContext;
    }

    public static void setSpringContext(ApplicationContext springContext) {
        SpringContextUtil.springContext = springContext;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        setSpringContext(applicationContext);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值