文章目录
- 二、命令列表
- 2.2 class/classloader相关命令
- 2.2.2 mc (Memory Compiler/内存编译器 )
- 举例1:可以通过-d命令指定输出目录:mc -d /temporary/tmp /temporary/tmp/AccountController.java
- 举例2:通过`--classLoaderClass`参数指定 ClassLoader
二、命令列表
2.2 class/classloader相关命令
2.2.2 mc (Memory Compiler/内存编译器 )
提示:
Memory Compiler/内存编译器,编译
.java
文件生成.class
。
注意点1
:mc 命令有可能失败。如果编译失败可以在本地编译好.class
文件,再上传到服务器。具体参考retransform命令说明。
注意点2
:编译生成.class
文件之后,可以结合retransform命令实现热更新代码。
参数说明:
参数名称 | 参数说明 |
---|---|
-c | 指定 classloader |
-d | 指定输出目录 |
代码:
package com.hero.lte.ems.security.controller;import com.hero.lte.ems.common.spring.SpringContextHolder;
import com.hero.lte.ems.db.orm.mybatis.Page;
import com.hero.lte.ems.security.config.Constants;
import com.hero.lte.ems.security.entity.*;
import com.hero.lte.ems.security.service.*;
import com.hero.lte.ems.security.util.UUIDGennerator;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.DefaultSessionKey;
import org.apache.shiro.session.mgt.SessionManager;
import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
import org.apache.shiro.subject.Subject;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.io.Serializable;
import java.time.Clock;
import java.util.*;@RestController
@RequestMapping("/lte/ems/user/")
public class AccountController {@Autowiredprivate IAccountService accountService;@Autowiredprivate IRoleService roleService;@Autowiredprivate IAuthService authService;@Autowiredprivate IRemindService remindService;@Autowiredprivate IStrategyService strategyService;/*** 查询帐户分页列表* @param account* @param pager* @return*/@RequestMapping(value = "query", method = RequestMethod.GET)public Page<Account> query(Account account, Page<Account> pager) {pager.setParam(account);return accountService.queryAccountPage(pager);}
举例1:可以通过-d命令指定输出目录:mc -d /temporary/tmp /temporary/tmp/AccountController.java
基本用法
:
mc -d 输出路径 置顶路径下的类
[arthas@24056]$ mc -d /temporary/tmp /temporary/tmp/AccountController.java
Memory compiler output:
/temporary/tmp/com/hero/lte/ems/security/controller/AccountController.class
Affect(row-cnt:1) cost in 2682 ms.
[arthas@24056]$
执行命令前效果
执行命令后效果,按照包名com.hero.lte.ems.security.controller创建.class文件
举例2:通过--classLoaderClass
参数指定 ClassLoader
基本用法
:mc --classLoaderClass 全包名类名 置顶路径下的类 -d 指定输出路径
$ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
Memory compiler output:
/tmp/com/example/demo/arthas/user/UserController.class
Affect(row-cnt:1) cost in 346 ms