gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:22:55 25 4
gpt4 key购买 nike

在 Groovy 文件中,我从一个字段接收输入,该字段包含用户输入的 groovy 脚本,比方说:

def x = a + 5
println x

我将其读取为字符串并将其存储在变量脚本中。然后我使用以下内容编译了此脚本: Script s = new GroovyShell().parse(script)现在,我想要的是将这个对象存储在 Oracle DB 中。它的目的是,我可以在任何需要的地方从数据库获取编译后的代码,并通过使用类似以下内容将变量绑定(bind)到它来运行它:

Binding b = new Binding().setVariable('a', 5))
s.setBinding(b) //s fetched from database
s.run()

问题:如何将该脚本对象存储在数据库中。我尝试使用以下方法将其插入 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)

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

提前致谢。

最佳答案

我会将脚本作为字符串(varchar)存储在数据库中。我会在第一次点击时进行编译,然后缓存已编译的脚本。缓存键将是脚本源或其哈希键,因此如果源发生更改,它将重新编译。可以使用数据库通知来实现其他优化。

关于java - 如何将编译后的groovy脚本存储在数据库中以便稍后获取并在绑定(bind)所需变量后运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com