JSR 223 javax.script API - интеграция Groovy с Java-приложением - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть 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 (ключ));

для передачи значения аргумента в сценарии.

Здесь, У меня есть пара вопросов.

  1. Является ли это наилучшим подходом для интеграции Groovy в Java?
  2. Сценарий компилируется каждый раз, когда я вызываю engine.eval?Если это так, производительность действительно хуже.
  3. Выполнение приведенного ниже кода для каждого скрипта при каждом вызове может быть тяжелым.

ScriptEngine engine = new ScriptEngineManager (). GetEngineByName("groovy");

Я передаю разные входы для разных скриптов для разных входов.Есть ли другой лучший способ.

Я сталкивался с загрузчиком классов Groovy и компилятором.Будет ли это хорошим вариантом, так как я могу загрузить сценарии из БД и предварительно скомпилировать все 30 сценариев при запуске приложения и просто использовать скомпилированный код.

Есть ли другой лучший способ сделать это, используя groovy или каким-либо другим способом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...