Я хочу использовать нестандартный скрипт 'Util' внутри другого скриптового скрипта. Я не хочу каждый раз загружать класс 'Util' в мой основной скрипт. Поэтому использование оценки или GroovyShell не подходит для моего случая.
Мое java-приложение извлекает из базы данных «основной» основной скрипт, каждый раз анализирует его и вызывает метод test () из основного сценария.
Java-код:
GroovyShell groovyShell = new GroovyShell();
Script parsedScript = groovyShell.parse(scriptBody);
ResultPojo result = (ResultPojo) parsedScript.invokeMethod("test", null);
основной сценарий
public int test(){
// this will not work at the moment
int result = GroovyUtils.sum();
return result;
}
Класс 'Util' будет также находиться в базе данных. Классы 'Util' будут каким-то образом загружены при запуске приложения и будут перезагружаться каждые X минут.
class GroovyUtils{
static int sum() {
return 2+1;
}
}
Как я уже сказал, я не хочу «разбирать» класс GroovyUtils внутри «основного» скрипта, потому что это дорого.
В идеале я хочу импортировать скрипт GroovyUtils, когда он мне нужен.
import groovy.GroovyUtils;
public int test(){
int result = GroovyUtils.sum();
return result;
}
Но для того, чтобы импортировать скрипт, его нужно сохранить в той же папке, в которой работает java-приложение. Java-приложение развертывается на удаленном сервере приложений в формате .war.
Могу ли я каким-то образом динамически загружать GroovyUtils в CLASSPATH, не сохраняя его, чтобы я мог импортировать его из своего основного сценария?
Есть предложения? Мои главные проблемы - это скорость и перезарядка.