美文网首页
Groovy补充

Groovy补充

作者: ronaldo18 | 来源:发表于2017-11-01 13:33 被阅读0次

    Java中运行Groovy,有三种比较常用的类支持

    • GroovyShell
      • 通常用来运行"script片段"或者一些零散的表达式(Expression)
    • GroovyClassLoader
      • 如果脚本是一个完整的文件,特别是有API类型的时候,比如有类似于JAVA的接口,面向对象设计时,通常使用GroovyClassLoader.
    • ScriptEngine
      • JSR-223应该是推荐的一种使用策略.规范化,而且简便.

    ScriptEngine

    • pom.xml依赖
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy</artifactId>
        <version>2.1.6</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-jsr223</artifactId>
        <version>2.1.6</version>
    </dependency>
    
    • 代码样例
    public static void evalScript() throws Exception{
        ScriptEngineManager factory = new ScriptEngineManager();
        //每次生成一个engine实例
        ScriptEngine engine = factory.getEngineByName("groovy");
        System.out.println(engine.toString());
        assert engine != null;
        //javax.script.Bindings
        Bindings binding = engine.createBindings();
        binding.put("date", new Date());
        //如果script文本来自文件,请首先获取文件内容
        engine.eval("def getTime(){return date.getTime();}",binding);
        engine.eval("def sayHello(name,age){return 'Hello,I am ' + name + ',age' + age;}");
        Long time = (Long)((Invocable)engine).invokeFunction("getTime", null);
        System.out.println(time);
        String message = (String)((Invocable)engine).invokeFunction("sayHello", "zhangsan",new Integer(12));
        System.out.println(message);
    }
    
    • 实际案例,Java调用groovy文件里面的方法,并传递参数
    static void simpleTest() throws IOException, InstantiationException, IllegalAccessException, ResourceException, ScriptException{
        String[] roots = new String[] { "src/main/groovy/com/mobile263/billing/groovy/" };
        //通过指定的roots来初始化GroovyScriptEngine
        GroovyScriptEngine gse = new GroovyScriptEngine(roots);
        GroovyObject groovyObject = (GroovyObject) gse.loadScriptByName("TestScript.groovy").newInstance();
        String result = (String) groovyObject.invokeMethod("output", "hello");
        System.out.println(result);
    }
    class TestScript {
        static String output(def str){
            println str;
            return "hello"+str;
        }
    }
    

    传送门

    Groovy入门

    Groovy入门

    与java的异同

    与java的异同

    Java嵌入Groovy

    Java嵌入Groovy

    数据库

    import groovy.sql.Sql;
    import org.h2.tools.Server; 
    
        def db = Sql.newInstance('jdbc:mysql://10.200.1.6:3306/test', 'root', 'aaaaaa', 'com.mysql.jdbc.Driver');
    
        db.execute(''' CREATE TABLE leike(mac varchar(20) NOT NULL PRIMARY KEY)''');
    
        def macs = new File('shroute_inst.csv').readLines() 
        //重复的mac地址个数: 也就是这么多地址更换了平台.
        macs.each{
            db.execute('INSERT INTO t1(c) values(?)', [it]);
        } 
    

    相关文章

      网友评论

          本文标题:Groovy补充

          本文链接:https://www.haomeiwen.com/subject/noawpxtx.html