Java中执行Groovy脚本

        最近项目有个需求,需要执行一个方法,方法的目的是输入一个金额XXX,根据抹零方式算出抹零后的金额,但是有个问题,困难场景:上游又获取不到抹零的方式;下游又获取不到XXX这个金额;这个时候需要写一个Groovy脚本,他有一个入参变量XXX,为抹零前的金额,我们在脚本中根据XXX、抹零方式给我计算逻辑;然后将这个脚本传递给上游调用。

处理方式:

下游写Groovy脚本:

if("00".equals(molingPattern) || "10".equals(molingPattern)){ //舍掉角(规则:精确到元位,角位四舍五入)
   scriptString = "priceAfterMoling = priceBeforeMoling.setScale(0, BigDecimal.ROUND_HALF_UP);";
} else if("01".equals(molingPattern) || "11".equals(molingPattern)){//舍掉分(规则:精确到角位,分位四舍五入) 
   scriptString = "priceAfterMoling = priceBeforeMoling.setScale(1, BigDecimal.ROUND_HALF_UP);"; 
} 

上游获取到这个脚本后,传递一个抹零前金额priceBeforeMoling, 进行执行:
Binding binding = new Binding();  
binding.setVariable("priceBeforeMoling", BigDecimal.valueOf(99.99));
GroovyShell shell = new GroovyShell(binding);  
String scriptString = getScrpitMethod();//通过某种方式获取到
shell.evaluate(scriptString);
BigDecimal priceAfterMoling = (BigDecimal) binding.getProperty("priceAfterMoling");
System.out.println("priceAfterMoling:"+priceAfterMoling);  

需引入jar包:
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import groovy.lang.Script;

pom.xml文件添加依赖:

<dependency>  
    <groupId>org.codehaus.groovy</groupId>  
    <artifactId>groovy</artifactId>  
    <version>2.1.6</version>  
</dependency>  
<dependency>  
    <groupId>org.codehaus.groovy</groupId>  
    <artifactId>groovy-jsr223</artifactId>  
    <version>2.1.6</version>  
</dependency>


上游处理还有另外一种写法,给出代码做参考:

Binding binding = new Binding();  
GroovyShell shell = new GroovyShell(binding);  
//直接方法调用  
Script script = shell.parse("def calculate(BigDecimal priceBeforeMoling) {return priceBeforeMoling.setScale(0, BigDecimal.ROUND_HALF_UP);}"); 
BigDecimal result = (BigDecimal)script.invokeMethod("calculate", BigDecimal.valueOf(0.0001));  
System.out.println(result);
根据groovy脚本方法的返回值来得到,而不是通过binding.getProperty来获取。这种写法对于只有一个返回值的比较方便,如果需要获取多个值,可能上面的会好一点,至于哪个性能好,没有测试过~

相关博文:

http://www.cnblogs.com/zz0412/p/Groovy001.html

http://blog.csdn.net/haigenwong/article/details/22947173


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值