Java中运行Groovy,有三种比较常用的类支持
- GroovyShell
- 通常用来运行"script片段"或者一些零散的表达式(Expression)
- GroovyClassLoader
- 如果脚本是一个完整的文件,特别是有API类型的时候,比如有类似于JAVA的接口,面向对象设计时,通常使用GroovyClassLoader.
- ScriptEngine
- JSR-223应该是推荐的一种使用策略.规范化,而且简便.
ScriptEngine
<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]);
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。