文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java动态脚本Groovy的特性是什么

2023-06-22 02:23

关注

这篇文章主要为大家展示了“Java动态脚本Groovy的特性是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java动态脚本Groovy的特性是什么”这篇文章吧。

1.Groovy特性

可将java代码在Groovy脚本动态编码、代码被修改达到不重启服务的目的(类似于热部署)

2.核心涉及

3.Java与Groovy转换

第一步:引入Groovy依赖

   <!--Groovy脚本依赖-->        <dependency>            <groupId>org.codehaus.groovy</groupId>            <artifactId>groovy</artifactId>            <version>2.5.14</version>        </dependency>

第二步:创建interface接口声明方法

public interface CallAnalysis {     default void load() {    }}

第三步:在resources目录下创建.groovy文件

package groovyimport com.example.groovy.testgroovy.task.CallAnalysisimport groovy.util.logging.Slf4j@Slf4jclass CallAnalysisImpl implements CallAnalysis{    @Override    void load() {        log.info("我被Groovy脚本加载...")    }}

第四步:创建Groovy脚本装载类,动态解析脚本为Class

package com.example.groovy.testgroovy.task;import groovy.lang.GroovyClassLoader;public class GroovyUtils {    private final static ClassLoader classLoader = GroovyUtils.class.getClassLoader();//获取当前类装载器    //ClassLoader:就是类的装载器,它使JVM可以动态的载入Java类,JVM并不需要知道从什么地方(本地文件、网络等)载入Java类,这些都由ClassLoader完成。    public final static GroovyClassLoader groovyClassLoader = new GroovyClassLoader(classLoader);    //GroovyClassLoader:负责在运行时编译groovy源代码为Class的工作,从而使Groovy实现了将groovy源代码动态加载为Class的功能。        public static <T> T instanceTaskGroovyScript(String script) throws IllegalAccessException, InstantiationException {        Class taskClz = groovyClassLoader.parseClass(script);        T instance = (T) taskClz.newInstance();        return instance;    }}

第五步:读取脚本内容,执行脚本

package com.example.groovy.testgroovy.task;import lombok.extern.slf4j.Slf4j;import org.apache.commons.io.FileUtils;import org.springframework.stereotype.Component;import java.io.File;import java.io.IOException;@Slf4j@Componentpublic class CallAnalysisGroovyTask {        public static String getGroovy() {        String context = "";        try {            String path = "E:\\IDEAFile\\testgroovy\\src\\main\\resources\\groovy\\CallAnalysisImpl.groovy";            context = FileUtils.readFileToString(new File(path));//将脚本内容转为字符串        } catch (IOException e) {            log.error("file is not found[{}]", e);        }        return context;    }        public static void execGroovy(String script) {        try {            CallAnalysis objClass = GroovyUtils.instanceTaskGroovyScript(script);//获取实例对象            objClass.load();//调用脚本方法        } catch (Exception t) {            log.error("execGroovy file {} error", script);        }    }        public static void main(String[] args) {        System.out.println("==================");        CallAnalysisGroovyTask task = new CallAnalysisGroovyTask();        String script = task.getGroovy();//获取脚本        execGroovy(script);//实例化脚本,执行方法        System.out.println("==================");    }}

Java动态脚本Groovy的特性是什么

4.Groovy特性验证

利用Groovy脚本特性,不重启服务,实时修改数据

第一步:将之前Groovy脚本数据修改。存于数据库表中,动态加载脚本

@Slf4jclass CallAnalysisImpl implements CallAnalysis {    private int anInt = 10;    private int bnInt = 10;    @Override    void load() {        log.info("当前类:[{}]", this.getClass().getName())        log.info("我被Groovy脚本加载...")        log.info("计算结果:[{}]", (anInt + bnInt))    }}

第二步:数据库表中:添加、查询Groovy脚本,动态加载执行

     @GetMapping("/saveScript")    public String saveScript() {        String scriptStr = callAnalysisGroovyTask.getGroovy();        Script script = new Script();//实体类对象        script.setScript(scriptStr);//脚本内容        script.setRuleId("1");//规则id        script.setScriptName("演示一");//脚本名称        service.save(script);        return "添加成功";    }        @GetMapping("/groovy")    public String groovy(final String ruleId) {        Script scr = scriptService.findScriptByRuleId(ruleId);//根据规则id查询        String scriptStr = scr.getScript();        callAnalysisGroovyTask.execGroovy(scriptStr);        return scriptStr;    }

添加结果:

Java动态脚本Groovy的特性是什么

 查询结果、控制台执行结果:

Java动态脚本Groovy的特性是什么

第三步:多次修改表数据值,查看执行结果

Java动态脚本Groovy的特性是什么

以上是“Java动态脚本Groovy的特性是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯