• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SpringBoot项目中使用Groovy脚本的示例代码

springboot 搞代码 4年前 (2022-01-09) 28次浏览 已收录 0个评论
文章目录[隐藏]

最近项目中遇到了这样的需求:需要检查一个表的某些字段,是否为空,或者是否符合预期规则:比如大于0,或者在某个范围内。考虑将表名和字段名配置在数据库中,然后规则使用Groovy来写,比较灵活。

1. 引入依赖

       <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>2.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-jsr223</artifactId>
            <version>2.5.5</version>
        </dependency>

2. 使用脚本引擎运行groovy脚本

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("groovy");
// 变量
Bindings bindings = engine.createBindings();
bindings.put("value", 10);
// groovy脚本
String scriptStr = "if (value == null) { return false}\n if (value <= 0) {return false} else { return true}";
// 执行脚本
Object res = engine.eval(scriptStr, bindings);

在实际项目中,可以把ScriptEngine engine在项目初始化的时候生成,不需要每次调用都再去生成一个。

通过debug知道,在ScriptEngine内部有个map会缓存曾经执行过的脚本,所以性能方面也不需要担心。

Groovy语法参考

3.思考

使用这种方式的好处是什么?

  • 方便:有新的表需要检查字段的时候,加配置就可以,减少工作量;简单的规则可以直接通过Groovy脚本实现,规则改变时可以很快的修改。
  • 成本低:Groovy语法和Java很像,不需要付出太大的学习成本。

为什么不使用规则引擎?

这不是个复杂的需求,现阶段没必要引入规则引擎也可以很好的完成需求。引入规则引擎会增加来4源gaodaimacom搞#代%码*网更多成本,但效果是差不多的。

SpringBoot+Groovy运行动态脚本

GroovyClassLoader方式

Java使用GroovyClassLoader动态加载Groovy脚本,调用脚本中的方法

在java中调用test.groovy脚本文件

            ClassLoader parent = this.getClass().getClassLoader();
            GroovyClassLoader loader = new GroovyClassLoader(parent);
            Class groovyClass = loader.parseClass(
                    new File("src/main/java/com/example/demo/groovyscript/test.groovy")
            );
            GroovyObject groovyObject= (GroovyObject)groovyClass.newInstance();
            String result = (String) groovyObject.invokeMethod("test", id);

Groovy

test.groovy脚本文件

package com.example.demo.groovyscript

class MyTest{
    static String test(String id){
        return "test1 id:"+ id;
    }
}

GroovyScriptEngine方式


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringBoot项目中使用Groovy脚本的示例代码

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址