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]);
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。