java应用中groovy脚本动态执行的运行与优化

5kgi1eie  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(876)

我一直在探索在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,但对于简单的脚本来说似乎不需要它)。

mcdcgff0

mcdcgff01#

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

相关问题