java - 从 Java 应用程序加载自定义 DSL 配置的更好方法

标签 java dsl jsr223

对于 Java 应用程序来说,有没有比使用 JSR223 ScriptEngineeval 更好的方法来支持基于自定义 DSL(例如依赖 Groovy 或 Kotlin)的配置文件compile 方法?

将脚本的内容加载为String,然后在类似的代码中使用它是可行的,但也许有更好、更有效的方法来做到这一点。

String type = "groovy"; // or "kts"
String script = "...";  // code of DSL script
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByExtension(type);
Compilable compiler = (Compilable) engine;
CompiledScript code = compiler.compile(script);
Object result = code.eval();

最佳答案

实际上是JMeter ,您应该将编译的脚本保存在缓存中并使用它:

CompiledScript compiledScript = compiledScriptsCache.get(newCacheKey);

同样适用于ScriptEngine

You can share a ScriptEngine and CompiledScript objects across threads. They are threadsafe. Actually, you should share them, as a single engine instance is a holder for a class cache and for JavaScript objects' hidden classes, so by having only one you cut down on repeated compilation.

关于java - 从 Java 应用程序加载自定义 DSL 配置的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55759984/

相关文章:

java - SCJP 模拟题 : How many objects are eligible for garbage collection?

java - 更改 servlet header 并重定向到过滤器中的其他 url

f# - 使用 SRTP 在 F# 中实现无标记最终编码

Java 脚本 API (JSR223) Groovy 语言限制

java - Scala 脚本引擎创建另一个单例实例

java - ARCore : should I add "uses-feature android:glEsVersion="0x0002000 0""?

c# - 将 xstream 生成的 xml 读入 .net

scala - 在运行时编译和执行Scala代码

python - 如何在特定字段上使用进行排序

kotlin - 通过 JSR-223 运行 kotlin 非常慢