首页 > 作文

Java动态脚本Groovy

更新时间:2023-04-04 02:52:08 阅读: 评论:0

目录
1.groovy特性 2.核心涉及 3.java与groovy转换 第一步:引入groovy依赖 第二步:创建interface接口声明方法 第三步:在resources目录下创建.groovy文件 第四步:创建groovy脚本装载类,动态解析脚本为class 第五步:读取脚本内容,执行脚本 4.groovy特性验证 第一步:将之前groovy脚本数据修改。存于数据库表中,动态加载脚本 第二步:数据库表中:添加、查询groovy脚本,动态加载执行 第三步:多次修改表数据值,查看执行结果5.总语

1.groovy特性

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

2.核心涉及

classl青年节黑板报oader:就是类的装载器,它使jvm可以动态的载入java类,jvm并不需要知道从什么地方(本地文件、网络等)载入java类,这些都由classloader完成。groovyclassloader:动态地加载一个脚本并执行它的行为。groovyclassloader是一个定制的类装载器,负责解释加载java类中用到的groovy类。

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的功能。    /**     * .     * 获取实例化对象     * @param script groovy脚本内容     * @param <t>     * @return     * @throws illegalaccesxception     * @throws instantiationexception     */    public static <t> t instancetaskgroovyscript(string script) throws illegalaccesxception, instantiationexception {        class taskclz = groovyclassloader.parclass(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 {    /**     * .     * 读取脚本内容     *     * @return     */    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;    }    /**     * .     * 执行groovy脚本     *     * @param script     */    public static void execgroovy(string script) {        try {            callanalysis objclass = groovyutils.instancetaskgroovyscript(script);//获取实例对象            objclass.loa日照有什么大学d();//调用脚本方法        } catch (exception t) {            log.error("execgroovy file {} error", script);        }    }    /**     * .     * main方法     * @param args     */    public static void main(string[] args) {        system.out.println("==================");        callanalysisgroovytask task = new callanalysisgroovytask();        string script = task.getgroovy();//获取脚本        execgroovy(script);//实例化脚本,执行方法        system.out.println("==================");    }}

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脚本,动态加载执行

 /**     * .     * 读取脚本,进行入库操作     *     * @return     */    @getmapping("/savescript")    public string savescript() {        string scriptstr = callanalysisgroovytask.getgroovy();        script script = new script();//实体类对象        script.tscript(scriptstr);//脚本内容        script.truleid("1");//规则id        script.tscriptname("演示一");//脚本名称        rvice.save(script);        return "添加成功";    }    /**     * .     * 从数据库表中,动态获取脚本     *     * @param ruleid 规则id     * @return 脚本内容     */    @getmapping("/groo劳动感悟vy")    public string groovy(final string ruleid) {        script scr = scriptrvice.findscriptbyruleid(ruleid);//根据规则id查询        string scriptstr = scr.getscript();        callanalysisgroovytask.execgroovy(scriptstr);        return scriptstr;    }

添加结果:

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

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

5.总语

目的达成,可见在不重启服务时,多次修改数据,脚本内容都会被动态加载。此处只是简单举例验证,可自行扩展

到此这篇关于java动态脚本groovy的文章就介绍到这了,更多相关java动态脚本groovy内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 02:52:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/573a8a44f1125c546f97e6a5eeae6bc7.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java动态脚本Groovy.doc

本文 PDF 下载地址:Java动态脚本Groovy.pdf

标签:脚本   动态   加载   内容
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图