Java-приложение занимает много времени для выполнения скриптов Groovy, которые предварительно соблюдаются - PullRequest
0 голосов
/ 19 февраля 2019

Мой сценарий groovy предварительно запустился при запуске сервера (я сохранил сценарии groovy как varchar в БД), как показано ниже в Map,

final Binding sharedData = new Binding();
final GroovyShell shell = new GroovyShell(sharedData);
script= shell.parse(rs.getString("VALIDATION_SCRIPT"));

Теперь при проверке проверки входных записей на основе указанной проверкиЯ пытаюсь выполнить предварительно скомпилированный скрипт, как показано ниже.

Script scrpt = Validation.getScript(); //getting from cache
scrpt.getBinding().setVariable("attributes", objects);
scrpt.getBinding().setVariable("tools", scrpt);
GroovyResponse gr = scrpt.evaluate("tools.valid(attributes)");

но здесь мое приложение требует много времени для оценки .. я думаю, размер кучи также увеличивается и происходит сборщик мусора.Может ли кто-нибудь помочь мне, если есть лучший способ сделать это.без влияния на производительность.

один из моих отличных сценариев:

import com.fis.derivatives.utility.generic.model.GroovyResponse;

def valid(Map mapInput){
    GroovyResponse obj = new GroovyResponse()
    if(mapInput.inputVal.equals("1")){
        obj.setStatus(true) ;
        obj.setResultValue("B") ;
    } else if(mapInput.inputVal.equals("2")){
        obj.setStatus(true) ;
        obj.setResultValue("S") ;
    }else{
        obj.setStatus(false);
        obj.setComment("Error : Unable to extract BUY_SELL. Please check BS value "+mapInput.inputVal+".")
    }
    return obj;
}

1 Ответ

0 голосов
/ 20 февраля 2019

1 - у меня есть сомнения по поводу вашего кеша.получение из кеша без ключа странно ...

Script scrpt = Validation.getScript(); //getting from cache

2 - немного переделать вызов groovy:

Script scrpt = Validation.getScript(); //getting from cache
//we will pass attributes as a parameter to method
//scrpt.getBinding().setVariable("attributes", objects); 
//not necessary to pass to script link to itself 
//scrpt.getBinding().setVariable("tools", scrpt);

GroovyResponse gr = scrpt.invokeMethod​("valid", objects);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...