在Groovy文件后,运行它,我收到来自具有由用户输入的Groovy脚本的字段输入,让我们说:如何存储编译的Groovy脚本在数据库中以后取出,并结合所必需的变量
def x = a + 5 println x
我看这是一个字符串,并将其存储在一个变量说script.Then我使用类似编译此脚本: Script s = new GroovyShell().parse(script)
现在,我想是存储该对象s Oracle数据库中。它的目的是,只要我需要,我可以获取从DB编译代码,并使用类似的变量绑定到它运行它:
Binding b = new Binding().setVariable('a', 5)) s.setBinding(b) //s fetched from database s.run()
问题:如何保存这些脚本对象S在DB。我试了一下Blob中使用插入: ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = null; try { out = new ObjectOutputStream(bos); out.writeObject(s); byte[] yourBytes = bos.toByteArray(); b = sql.getConnection().createBlob(); b.setBytes(1, yourBytes); } finally { out.close(); bos.close(); }
但这似乎可能没有,因为在序列化对象s,我得到以下异常: Caught: java.io.NotSerializableException: org.codehaus.groovy.runtime.InvokerHelper$2 java.io.NotSerializableException: org.codehaus.groovy.runtime.InvokerHelper$2 at java_io_ObjectOutput$writeObject.call(Unknown Source)
什么,我希望在这里实现的性能优化。不要一次又一次地编译和运行Groovy脚本,我希望它能够编译一次,并在绑定数据时随时运行。
在此先感谢。
仔细阅读文章ab groovy类加载器,嵌入,脚本类(需要时智能重新编译)。我认为你的问题,在加载可能你需要扩展GroovyClassLoader –
保存代码不完整是一个问题。什么是'?'不存储“脚本”对象(我相信是不可Seriazable,理解为什么),但类 –
S是我的编译脚本对象。是的,我知道对象不能被序列化导致异常。我只是指定这是我尝试的解决方案,但没有工作。我在寻找的是执行此任务的任何可行的替代解决方案。 – Nitin