文章目录
- 二、命令列表
- 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 {
@Autowired
private IAccountService accountService;
@Autowired
private IRoleService roleService;
@Autowired
private IAuthService authService;
@Autowired
private IRemindService remindService;
@Autowired
private 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