Spring boot, контролирующий запуск приложения - PullRequest
1 голос
/ 25 марта 2019

Как я могу программно управлять запуском приложения в зависимости от сервера конфигурации? У меня есть сценарий sh для управления в docker-compose up, но мне интересно, могу ли я управлять им программно в весеннем приложении.

Привет

1 Ответ

0 голосов
/ 25 марта 2019

Если вы используете Ubuntu, то следующее решение будет работать безупречно. Если вы находитесь в другом дистрибутиве и если ps -A не работает, пожалуйста, найдите эквивалентный. Теперь поговорим о стратегии, как это делается ниже. Я хотел, чтобы мое приложение запускалось скриптом, так как оно содержит некоторые аргументы JVM. Поэтому, когда мое приложение будет запущено, скрипт также будет в списке активных процессов. После завершения запуска приложение определяет, присутствует ли мой файл сценария в списке активных процессов или нет. Если его там нет, приложение закрывается. Следующий пример, вероятно, даст вам представление о том, как реализовать то же самое с сервером конфигурации.

@Autowired
private ApplicationContext context;

@EventListener(ApplicationReadyEvent.class) // use in production
public void initiateStartup() {

    try {
        String shProcessName = "root-IDEA.sh";
        String line;
        boolean undesiredStart = true;

        Process p = Runtime.getRuntime().exec("ps -A");
        InputStream inputStream = p.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        while ((line = bufferedReader.readLine()) != null) {

            if (line.contains(shProcessName)) {
                undesiredStart = false;
                break;
            }
        }

        bufferedReader.close();
        inputStreamReader.close();
        inputStream.close();

        if (undesiredStart) {
            System.out.println("--------------------------------------------------------------------");
            System.out.println("APPLICATION STARTED USING A DIFFERENT CONFIG. PLEASE START USING THE '.sh' FILE.");
            System.out.println("CLOSING APPLICATION");
            System.out.println("--------------------------------------------------------------------");

            // close the application
            int exitCode = SpringApplication.exit(context, (ExitCodeGenerator) () -> 0);
            System.exit(exitCode);
        }

        System.out.println("APPLICATION STARTED CORRECTLY");

    } catch (IOException e) {
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...