У меня есть 30 различных скриптов в БД, которые мне нужно выполнить в моей Java-программе.Эти сценарии предназначены для массирования входных данных.Так как логика массирования данных слишком динамична (время от времени меняются), я извлекаю ее с помощью скрипта groovy, чтобы можно было обновлять логику в БД.
Существует несколько скриптов, которые принимают некоторые аргументы.
Будут миллионы запросов, и мне нужно выполнить эти 30 сценариев для каждого запроса.
Код, который я делаю,
public String execute(final String expression, final Map<String, Object> inputs) {
final ScriptEngine engine = new ScriptEngineManager().getEngineByName("groovy");
Object returnValue = null;
try {
for (String key:inputs.keySet()){
engine.put(key, key:inputs.get(key));
}
engine.eval(expression);
try {
return ((Invocable)engine).invokeFunction("getValue", value[0]);
}
catch (final NoSuchMethodException e) {
e.printStackTrace();
}
}
catch (final ScriptException e) {
e.printStackTrace();
}
return null;
}
Здесь выражение являетсяскрипт загружен из БД.Использование
engine.put (ключ, ключ: input.get (ключ));
для передачи значения аргумента в сценарии.
Здесь, У меня есть пара вопросов.
- Является ли это наилучшим подходом для интеграции Groovy в Java?
- Сценарий компилируется каждый раз, когда я вызываю engine.eval?Если это так, производительность действительно хуже.
- Выполнение приведенного ниже кода для каждого скрипта при каждом вызове может быть тяжелым.
ScriptEngine engine = new ScriptEngineManager (). GetEngineByName("groovy");
Я передаю разные входы для разных скриптов для разных входов.Есть ли другой лучший способ.
Я сталкивался с загрузчиком классов Groovy и компилятором.Будет ли это хорошим вариантом, так как я могу загрузить сценарии из БД и предварительно скомпилировать все 30 сценариев при запуске приложения и просто использовать скомпилированный код.
Есть ли другой лучший способ сделать это, используя groovy или каким-либо другим способом?