如何通过JSR-223 API在Java中集成Groovy并配置自定义脚本基类
使用JSR-223配置Groovy自定义脚本基类的方法
JSR-223标准API本身没有直接提供配置Groovy脚本基类的接口,但Groovy的JSR-223实现(GroovyScriptEngineImpl)支持通过以下两种方式实现:
方法一:手动实例化GroovyScriptEngineImpl并传入自定义CompilerConfiguration
直接创建配置类并传入引擎构造方法,这种方式可控性最强:
// 1. 创建并配置CompilerConfiguration CompilerConfiguration cfg = new CompilerConfiguration(); cfg.setScriptBaseClass(CustomScript.class.getName()); // 2. 手动实例化GroovyScriptEngineImpl GroovyScriptEngineImpl engine = new GroovyScriptEngineImpl(cfg); // 3. 执行脚本 Bindings bindings = engine.createBindings(); engine.eval("自定义脚本代码", bindings);
方法二:通过ScriptEngineManager获取后修改配置
如果依赖ScriptEngineManager获取引擎,可以向下转型后修改配置:
ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("groovy"); // 向下转型为GroovyScriptEngineImpl if (engine instanceof GroovyScriptEngineImpl) { GroovyScriptEngineImpl groovyEngine = (GroovyScriptEngineImpl) engine; CompilerConfiguration cfg = groovyEngine.getCompilerConfiguration(); cfg.setScriptBaseClass(CustomScript.class.getName()); // 注意:多线程共享引擎时,修改配置可能引发线程安全问题,建议每个线程使用独立引擎实例 } // 执行脚本 engine.eval("自定义脚本代码");
注意事项
CustomScript必须继承Groovy的Script类,且包含无参构造方法,否则脚本执行会报错。- 多线程场景下,建议为每个线程创建独立的
GroovyScriptEngineImpl实例,避免配置被并发修改导致异常。
内容的提问来源于stack exchange,提问作者bug_moreclear
相关产品推荐
相关产品推荐

