当前位置: 首页 > 知识库问答 >
问题:

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

皇甫学海
2023-03-14

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

脚本的内容加载为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();

共有1个答案

章安易
2023-03-14

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

CompiledScript compiledScript = compiledScriptsCache.get(newCacheKey);

脚本引擎也是如此

您可以跨线程共享ScriptEngine和CompiledScript对象。它们是线程安全的。实际上,您应该共享它们,因为一个引擎实例是类缓存和JavaScript对象隐藏类的持有者,所以只有一个引擎实例可以减少重复编译。

 类似资料:
  • 我们正在将一个应用程序从JBoss迁移为6到7。 这个新实例正在使用独立的ha配置文件。在以前的版本中,我们使用了一个自定义的Infinispan加载器,它将缓存条目存储到我们的自定义数据库中。 现在,在JBoss 7.1上,当尝试使用可视化管理控制台更改此配置时,它不起作用。我们在“复制缓存”的选项卡“Store Class Impl”上键入的值没有按应有的方式存储在配置文件配置中。所以,这是我

  • 问题内容: 我有一个Java类,它在启动时基于javassist类加载器创建自定义类加载器,然后运行实际的程序类。我收到以下错误: 该问题与以下事实有关:一个对象是由原始类加载器创建的,而另一个是由自定义类创建的。 有没有办法解决此错误? 在此先感谢 Avner 问题答案: 请尝试将-Dlog4j.ignoreTCL =true设置为希望有帮助。关于log4j的类似问题

  • 问题内容: 对我先前的问题采取了后续行动。我正在尝试使用JSR-330标准注释和jersey捆绑的HK2框架注入应用程序配置数据。 理想情况下,我想为注释创建一个自定义,该自定义将在或对象中查找所需的值,该值将从其他地方读取的数据中填充。在我的第一次尝试中,我创建了一个实例,例如 然后我的模样 我的问题是那是空的。知道有什么问题吗?另外,我可以绑定我的Injector实例而不是绑定类吗?这样,我可

  • 然后我的看起来像 我的问题是为空。知道怎么了吗?另外,我可以绑定我的注入器的实例而不是绑定类吗?这样,我就可以构造将数据作为参数传递的实例。

  • 我正在努力弄清楚我为React应用程序配置Firebase的尝试出了什么问题。我已经遵循了至少10个不同的教程,但无法让配置变量注册为已识别的。 然后,我有一个firebase/firebase.js文件,如下所示: 我一直试图弄清楚为什么配置变量被记录为未定义。 有没有人知道如何成功配置一个firebase应用程序。我之前关于这个主题的问题建议删除env.development文件中的:和值之间

  • 我正在尝试使用 Java DSL 部署流。 这里创建流的代码(流畅的风格) 部署方法 以及为源应用程序创建bean的方法 我首先触发方法,然后。问题是-我想为http源代码应用程序将应用程序版本设置为,但为该应用程序部署的最终pod的映像版本等于默认版本。是否可以使用JavaDSL设置应用程序版本?