gpt4 book ai didi

java - Groovy Shell 脚本对象未完全执行

转载 作者:行者123 更新时间:2023-11-30 05:50:40 26 4
gpt4 key购买 nike

我们正在创建一个 groovy shell 对象并将绑定(bind)传递给 shell,然后使用 shell 解析 groovy 代码并初始化 Script对象如下

GroovyShell shell = new GroovyShell(binding); 
Script script = shell.parse(//groovy code );

然后我们将脚本对象存储在并发 HashMap 中并使用 script.run() 运行脚本从这个 hashmap 中获取脚本,但是脚本中的 groovy 代码没有完全执行,比如说 100 次运行中有 1 次。我们在//groovy 代码中放置了日志,显示代码没有完全运行,也没有抛出任何异常

最佳答案

当您同时在不同线程中运行相同的脚本实例时,它可能会被脚本的逻辑停止。

如果您想缓存已解析的脚本,请将已解析的类而不是脚本的实例存储到映射中,并为每次运行重新绑定(bind)变量。

下面的代码片段应该能让您了解如何做到这一点:

scriptMap = new HashMap()

Script getScript(String code){
Class<Script> scriptClass = scriptMap.get(code);
if(scriptClass)return script.newInstance();
GroovyShell shell = new GroovyShell();
Script script = shell.parse( code );
scriptMap.put(code, script.getClass());
return script;
}

Object runScript(String code, Map variables){
Script script=getScript(code);
script.setBinding( new Binding(variables) );
return script.run();
}

println runScript("a+b", [a:2,b:7])
println runScript("(b-a)*3", [a:7,b:9])
println scriptMap

关于java - Groovy Shell 脚本对象未完全执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53957449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com