方案一:测试类
package cn.wanda.wic.content.job.xxljob;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@SpringBootTest
public class ShopResourceMigrationJobTest {
@Resource
private ShopResourceMigrationJob shopResourceMigrationJob;
@Test
public void testApprovalCompensationHandler_noInstances() {
shopResourceMigrationJob.execute();
System.out.println("执行完成");
}
}
注意点:测试类包路径,需要与被测试类相同
缺点:每运行一次,需要启动一次项目(需要频繁启动项目,耗时长)
方案二:arthas
优点:一次启动服务,终生可用
缺点:对开发人员有一定要求
以下是具体步骤:
- 安装 IDEA Arthas 插件 -- arthas idea
- 添加 pom 依赖
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-spring-boot-starter</artifactId>
<version>4.0.1</version>
</dependency>
最新版本可查阅:Maven Central: com.taobao.arthas:arthas-spring-boot-starter
- 添加 上下文配置类
package cn.wanda.wic.content.job.utils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @author chenlong
*/
@Component
public class ApplicationContextProvider1 implements ApplicationContextAware {
private static ApplicationContext context;
public ApplicationContext getApplicationContext() {
return context;
}
@Override
public void setApplicationContext(ApplicationContext ctx) {
context = ctx;
}
}
之所以命名 ApplicationContextProvider1 是因为源码中包含 ApplicationContextProvider,不然会导入该类跳过执行
原因不明,待研究(大佬可补充说明)
- 引入上下文类到 arthas
复制路径:@cn.wanda.wic.content.job.utils.ApplicationContextProvider1@context
粘贴:
- 启动服务(JRebel插件debug启动,好像普通模式启动会无法获取上下文,没尝试过)
- 打开 arthas 本地控制台
http://localhost:8563/
- 复制方法执行命令
- 执行
- 查看idea控制台,完结撒花~
参考资料
使用Arthas显式执行代码,避免重启应用,10倍提升本地研发效率 · Issue #1823 · alibaba/arthas · GitHub
插件文档:arthas idea plugin 配置 · 语雀