2012-04-14 35 views
2

我從scala動態運行groovy腳本,但調用Groovy腳本引擎的loadScriptByName方法時需要一些時間來編譯groovy腳本。如何緩存由Groovy腳本引擎編譯的類?

從我的應用程序加載和編譯的大多數groovy腳本自上次運行應用程序以來沒有更改,所以我猜它不是每次都需要編譯它們。

有沒有什麼方法可以存儲編譯好的groovy腳本,並在我的應用程序中運行它們,如果它們沒有任何更改?我知道groovy腳本引擎緩存編譯腳本如果您在同一個groovy腳本上調用loadScriptBynName方法兩次或更多,但當我關閉我的應用程序時,這些緩存已經消失。也許它是在內存上存儲緩存的腳本?

+1

的GroovyScriptEngine存儲編譯存儲器腳本在名爲[scriptCache]變量(https://github.com/groovy/groovy-core/blob/master/src/main/groovy/ UTIL/GroovyScriptEngine.java#L99)。 – 2012-04-15 13:08:58

回答

2

使用:

String script = ""  // some script 
string scriptName = "" // unique script name 

GroovyClassLoader groovyClassLoader = GroovyClassLoader() 
GroovyCodeSource gcs = new GroovyCodeSource(script, scriptName, "/app/script"); 
Class<?> executableClass = groovyClassLoader.parseClass(gcs, true);