Завершение весенней загрузки приложения из нескольких приложений, работающих на одном компьютере - PullRequest
1 голос
/ 04 ноября 2019

Я хочу отключить приложение весенней загрузки программно из нескольких приложений, работающих на одном сервере Tomcat, без остановки Tomcat.

Я искал в Google несколько решений, таких как

System.exit(0) 

и

SpringbootApplication.exit()

вызывает отключение кота. Я не хочу закрывать кота. Только конкретное приложение.

Как я могу это сделать ... программно, есть ли способ сделать это.

Просьба помочь!

Ответы [ 3 ]

3 голосов
/ 04 ноября 2019

Одним из способов является использование привода.

Добавьте эту зависимость в ваш pom

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Добавьте эти свойства в свой файл yml / properties

management.endpoint.shutdown.enabled=true
endpoints.shutdown.enabled=true
management.endpoints.web.exposure.include=*

Имея это, вы можете поразить эту конечную точку отдыхачтобы закрыть приложение

http://host:port/actuator/shutdown

Это вызов POST . Если вы используете Spring Security в своем приложении, вы можете внести некоторые коррективы, чтобы эта конечная точка прошла. Вы можете вызвать пост звонка, используя curl как

curl -X POST http://host:port/actuator/shutdown
0 голосов
/ 04 ноября 2019

Один из способов сделать это - убить процесс приложения .

Сначала приложение должно записать свой PID в файл (shutdown.pid):

SpringApplicationBuilder app = new SpringApplicationBuilder(Application.class)
  .web(WebApplicationType.NONE);
app.build().addListeners(new ApplicationPidFileWriter("./bin/shutdown.pid"));
app.run();

Затем вы можете создать файл (shutdown.bat) и добавить следующую строку:

kill $(cat ./bin/shutdown.pid)

Выполнение shutdown.bat извлекает идентификатор процесса из файла shutdown.pid и использует команду killзавершить загрузку приложения.

ps: украдено у здесь .

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

Вы можете сделать это путем регистрации конечной точки (хотя и с высокой степенью защиты), на которую ваши приложения могут отправлять запрос на завершение работы, и вы можете кодировать конечную точку, как показано ниже:

         ConfigurableApplicationContext ctx = SpringApplication.run(YourApplicationClassName.class, args);
        int exitCode = SpringApplication.exit(ctx, new ExitCodeGenerator() {
            @Override
            public int getExitCode() {
                // no errors
                return 0;
            }
        });

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

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