官方的demo中action的用法让人产生歧义,其实模块的数据交互的关键的就在于action的使用
写了一个简单的demo。
主模块(最外层API)调用action
/**
* 组装order信息
*
* @return
*/
@RequestMapping(value = "/buildOrder/{userId}", method = RequestMethod.GET)
@ResponseBody
public Object buildOrder(@PathVariable("userId") String userId) {
// 查找模块-组装发票
Module findModule = moduleManager.find("invoice-jars");
// 执行Action,数据交互
Action<String, String> action = findModule.getAction("invoiceAction");
String orderString = action.execute(userId);
return orderString;
}
action在子模块中,数据的组装、业务的处理都由子模块独立完成。
/**
* Created by wangchangliang on 2018/3/26.
*/
public class InvoiceAction implements Action<String, String> {
@Override
public String execute(String userName) {
InvoiceUtil invoiceUtil = new InvoiceUtil();
InvoiceRDTO payment = invoiceUtil.createInvoice(userName);
return JSON.toJSONString(payment);
}
@Override
public String getActionName() {
return "invoiceAction";
}
}
子模块的修改完成之后,需要打包并且拷贝到webapp内,手动或等待定时器自动加载最新的jar之后完成热插拔
@RequestMapping(value = "/reload", method = RequestMethod.GET)
@ResponseBody
public Object reloadModule() {
ModuleConfig moduleConfig = ModuleRefreshSchedulerImpl.buildModuleConfig();
moduleConfig.setEnabled(true);
moduleService.loadAndRegister(moduleConfig);
return "success";
}
下载附件必须要积分。。并没有想要
附件:点击打开链接
官方地址:https://github.com/alibaba/jarslink