Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java应用程序中Groovy脚本动态执行的运行与优化_Java_Groovy_Cassandra_Groovyshell_Groovyclassloader - Fatal编程技术网

Java应用程序中Groovy脚本动态执行的运行与优化

Java应用程序中Groovy脚本动态执行的运行与优化,java,groovy,cassandra,groovyshell,groovyclassloader,Java,Groovy,Cassandra,Groovyshell,Groovyclassloader,我一直在探索在java应用程序中动态运行groovy脚本的方法 我经历过如下方法: 1.槽壳 binding.setVariable("x", 5); String script = "y = x * x" GroovyShell gs = new GroovyShell(); Script script = gs.parse(script); script.run(); 使用GroovyClassLoader 我有两个java应用程序。其中一个是GUI的后端,它在GUI执行数据时存储数据。两

我一直在探索在java应用程序中动态运行groovy脚本的方法

我经历过如下方法: 1.槽壳

binding.setVariable("x", 5);
String script = "y = x * x"
GroovyShell gs = new GroovyShell();
Script script = gs.parse(script);
script.run();
  • 使用GroovyClassLoader
  • 我有两个java应用程序。其中一个是GUI的后端,它在GUI执行数据时存储数据。两者之间没有共同的缓存。 为了避免每次编译的开销,我考虑先在应用程序B中编译应用程序,然后缓存它(这样也可以避免内存泄漏)。此外,我还尝试存储通过最初编译脚本生成的类文件,然后将其以字节的形式存储在数据库中,但到目前为止还没有成功

    但是,我不确定这是否是一种优化,或者GroovyShell/Groovy类加载器是否已经缓存了生成的类文件。 最好的办法是什么

    而且,脚本并不简单,那么,在这里,哪种机制更适合GroovyShell或Groovy类加载器呢?(还有,探索GrooyScriptEngine,但对于简单脚本来说似乎不需要它)。

    Afaik gs.parse(脚本)不会缓存编译。因此,缓存脚本会有所帮助,因为这样您就不必每次都为编译付费。如果您真的想将字节码写入数据库,那么我建议使用GroovyClassLoader(GCL)。。。事实上,我建议对它进行子类化并重写createCollector以提供您自己的收集器(委托给原始收集器),这允许您访问字节[]。或者您使用的是,必须在给GCL的编译器配置中设置