Groovy调用示例

项目背景介绍:

由于某电商网站的数据量比较大,价格体系变更频繁,因此采用Groovy语言对价格统一展示,设计一个价格引擎具体如下:

一 、控制层中调用Groovy脚本

                ObjectMapper mapper = new ObjectMapper();  
Map<String,Object> params = JsonUtil.jsonToMap( getInParam().get("params").toString() );
TAceRule aceRule = new TAceRule();
aceRule.setName( getInParam().get("ace_rule_name").toString() );//获取groovy脚本名称
MyBatisDAO mybatisDao = (MyBatisDAO) this.getDaoFactory().get( "myBatisDAO" );
aceRule = mybatisDao.getAceRule(aceRule);
if(aceRule == null){
getOutParam().put("errorDetail", "没有配置通用规则");
return RETURN.REQ_PARAM_ERROR;
}
// 获取groovy脚本引擎
Calculate cal = CalculateManager.instant.calculate(StringUtils.hasText(aceRule.getEngine())?aceRule.getEngine():"groovy");//获取计算引擎,默认为groovy
CalculateContext context = CalculateManager.instant.context();//实例化CalculateContext  类
context.setContext("dao", getDaoFactory());  //设置Dao,Groovy引用的时候直接用dao来调用
context.setContext("session",getSession());//设置session,
context.setContext("cookie", getCookies());//设置cookie
context.setContext("inparams", params );//设置参数
cal.calculate(aceRule.getContext(), context);//参数 aceRule.getContext() 为数据库中的groovy脚本文件。
setOutParam(new HashMap<String, Object>(context.getContext()));
getOutParam().put("errorDetail", "计算完成");
return RETURN.SUCCESS;

二、CalculateManager 接口类

public enum CalculateManager {
instant;
public Calculate calculate(String script ){
//默认获取groovy
return new ScriptCalculate(script);
}

public CalculateContext context(){
retu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值