前言之前
所谓十倍提高效率,也是有场景限制的,并不会原本需要 10 个小时的任务,突然 1 个小时就能完成了。
这里指的是,本地使用 Spring 环境开发时,通过这套方法,可以随时调用任意方法,不需要反复重启,不需要编写入口代码(如 HTTP 入口),不需要等待 XXL-JOB 的任务调度。在这些场景下,会提高十倍效率一点也不为过。
准备工作
安装 JRebel
JRebel 可以使得大部分代码修改,如新增接口、类、方法时均可无需重启,热加载变更代码。
安装 JRebel and XRebel for IntelliJ, (激活方式可以参考这里) 在启动项目时选择 JRebel 的 Debug 模式启动,并在启动配置的 On ‘Update’ action 选项中选择「Update classes and resources」:
之后在修改代码后点击更新按钮即可:
安装 JRebel MybatisPlus Extension(可选)
JRebel 没有为 Mybatisplus 做适配,所以还需要这个插件:
启动失败
安装插件之后启动,可能会提示 mybatis xml 检查不通过,启动报错。此时则需要按照报错提示,清除掉 mybatis xml 中重复的代码。
之后更新 xml 后点击刷新,可能会出现「Loaded classes are up to date. Nothing to reload.」,看起来好像没检测到要 reload 的东西,但实际上可能已经 reload 过了,再次调用修改后的 sql ,控制台会出现「JRebel: Reloading SQL maps」。
启动 Arthas
Arthas 是一个万能的 Java 在线诊断工具,我们下面会将 Arthas 结合 JRebel 一起使用。
启动 Arthas 有两种方式,一种是在项目启动后,单独运行 arthas。另一种是项目中集成 Arthas,随着项目一起启动。在本地单独启动 arthas 有点麻烦,而且与 IDEA 可能会有点冲突。所以建议开发时在项目中集成 Arthas:
安装 Arthas IDEA 插件
该插件可以很方便地快速获取命令,否则的话则需要背熟 Arthas 文档。直接 IDEA 插件市场搜索 arthas-idea-plugin ,或参考 https://arthas.aliyun.com/doc/idea-plugin.html 。
设置 Spring Context
要在 Spring 的上下文中调用方法,就需要先设置 SpringContext 的位置,该配置在 arthas 的插件设置中。我们接下来要调用 Spring 方法时,实际上是先从 spring context 中 getBean(),通过这个 bean 来调用方法。
两种方式,一个是在启动的 main 方法中保存下来启动之后的返回值,并保存为 static 变量:
另一种方式是写一个类,实现 ApplicationContextAware 接口并保存下 ApplicationContext,参考代码如下:
@Component
@Order
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Autowired
public ApplicationContextHolder(ApplicationContext applicationContext) {
ApplicationContextHolder.applicationContext = applicationContext;
}
}
设置 Arthas IDEA 插件
在 设置 → Arthas Idea Plugin → Spring Static Context Ognl Setting 中填入上一步获取的地址。「@ApplicationContextHolder 完整类路径@context」
愉快地玩耍
需要调用某个 Spring 环境下的方法时,点击 arthas 插件中的「Static Spring Context Invoke Method Field」,获取命令后粘贴到 Arthas 控制台执行:
当方法发生改变时,只需要点击更新按钮,再通过 arthas 进行调用即可。
下面是一个小 Demo,看了你就会明白它的强大之处:
再快一点点
在调用 Arthas 命令时,需要在浏览器中打开 localhost:8563,调用时需要来回切界面,有些许的麻烦。
可以在 IDEA 中搜索插件 「Embedded Web Browser」,右侧会有一个小小的浏览器窗口。在这个打开即可以无需切页面,在 IDEA 中直接打开窗口,用完就关:



