我在服务器启动时预先完成了Groovy脚本(我已经将Groovy脚本存储为DB中的varchar),如下图所示,
final Binding sharedData = new Binding();
final GroovyShell shell = new GroovyShell(sharedData);
script= shell.parse(rs.getString("VALIDATION_SCRIPT"));
现在,当基于指定的验证ID检查输入记录的验证时,我尝试执行如下所示的预编译脚本。
Script scrpt = Validation.getScript(); //getting from cache
scrpt.getBinding().setVariable("attributes", objects);
scrpt.getBinding().setVariable("tools", scrpt);
GroovyResponse gr = scrpt.evaluate("tools.valid(attributes)");
但是这里我的应用程序需要花费很长时间进行评估..我想堆大小也会增加,并且会发生GC。如果有更好的方法可以帮助我。不会影响性能。
我的常规脚本之一:
import com.fis.derivatives.utility.generic.model.GroovyResponse;
def valid(Map mapInput){
GroovyResponse obj = new GroovyResponse()
if(mapInput.inputVal.equals("1")){
obj.setStatus(true) ;
obj.setResultValue("B") ;
} else if(mapInput.inputVal.equals("2")){
obj.setStatus(true) ;
obj.setResultValue("S") ;
}else{
obj.setStatus(false);
obj.setComment("Error : Unable to extract BUY_SELL. Please check BS value "+mapInput.inputVal+".")
}
return obj;
}
答案 0 :(得分:0)
1-我对您的缓存有疑问。从缓存中获取任何密钥都是很奇怪的...
Script scrpt = Validation.getScript(); //getting from cache
2-重做一些时髦的事情:
Script scrpt = Validation.getScript(); //getting from cache
//we will pass attributes as a parameter to method
//scrpt.getBinding().setVariable("attributes", objects);
//not necessary to pass to script link to itself
//scrpt.getBinding().setVariable("tools", scrpt);
GroovyResponse gr = scrpt.invokeMethod("valid", objects);