如何在数据库中存储已编译的groovy脚本以便稍后获取并在绑定所需变量后运行它

时间:2017-08-11 17:32:44

标签: java oracle grails groovy groovyshell

在Groovy文件中,我收到来自某个字段的输入,该字段具有用户输入的groovy脚本,假设:

$ mvn --version Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T12:39:06-07:00) Maven home: /usr/local/Cellar/maven/3.5.0/libexec Java version: 1.8.0_144, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "10.12.6", arch: "x86_64", family: "mac"

我把它读作一个String并将其存储在一个变量说脚本中。然后我使用类似的东西编译这个脚本:     def x = a + 5 println x 现在,我想要的是将此对象存储在Oracle DB中。它的目的是,我可以从我需要的任何地方获取编译代码,并通过使用以下内容将变量绑定到它来运行它:

Script s = new GroovyShell().parse(script)

问题:如何在DB中存储此Script对象。我尝试使用以下方法在Blob中插入:     Binding b = new Binding().setVariable('a', 5)) s.setBinding(b) //s fetched from database s.run()

但这似乎不可能,因为在序列化s对象时,我得到以下异常:     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(); }

我希望在这里实现的是性能优化。我不想一次又一次地编译和运行Groovy脚本,而是希望它编译一次并在绑定数据时随时运行。

提前致谢。

0 个答案:

没有答案