Поддерживать состояние объекта Java при вызове процесса Java из скрипта bash. - PullRequest
1 голос
/ 04 октября 2019
    public class Go {
            private static SomeObject fld;
            public static void main(String[] args) {
                   //depending on the args I do call different methods(among 
                   //them one arg will do the job of initialization of fld variable)
            }
    }

Я вызываю вышеупомянутую функцию Java из сценария bash.

while true
do
    read commands
    java -cp some-jar.jar Go <commands>
then

Скажем, команда1 выполняет инициализацию fld в Go классе и команде2выполняет некоторую обработку по инициализированному полю.

Поскольку я вызываю разные процессы Java для разных команд, состояние объектов fld не сохраняется для следующей команды.

Как я могу изменить код так, чтобы информация fld сохранялась для следующих команд без использования какой-либо базы данных или десериализации и сериализации?

1 Ответ

0 голосов
/ 04 октября 2019

Вы можете сохранить результат в переменной bash:

Go.java :

class Go {
    private static String fld;

    public static void main(String[] args) {
        fld = args[0];
        fld += fld.length();
        System.out.println(fld);
    }
}

run.sh

VALUE=test

while true
do
    VALUE=`java  Go $VALUE`
    echo $VALUE
done

Вывод :

test4
test45
test456
test4567
test45678

Или сохранить результат в файл, прочитать его в bash и передать в качестве параметра в Go.java.

Вот хранилище файловпример:

Пример файла Go.java :

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

class Go {
    private static String fld;

    public static void main(String[] args) throws IOException {
        fld = args[0];
        fld += fld.length();
        FileWriter fileWriter = new FileWriter("store.txt");
        PrintWriter printWriter = new PrintWriter(fileWriter);
        printWriter.print(fld);
        printWriter.close();
    }
}

Пример файла run.sh :

VALUE=store
while true
do

    java  Go $VALUE
    VALUE=`cat ./store.txt`
    echo $VALUE
done

Пример файла Вывод :

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