У меня есть небольшая служба REST, созданная с помощью Spark Java 2.9.1, которая включает API для изменения привязанного IP-адреса и порта службы. Если эти настройки изменены, я хочу остановить текущую службу и перезапустить ее с новыми значениями, не выходя из JVM.
Мой базовый c процесс для этого:
- Запустите службу.
- Вызовите awaitInitialiation () (потому что я не хочу вызывать awaitStop () до его инициализации).
- Вызовите awaitStop () и дождитесь завершения текущей службы .
- Начните с новых параметров.
Для этого я использую интерфейс экземпляра, поскольку у меня есть две службы: одна по HTTP, а другая по HTTPS.
Сокращенная версия этого без фактического перезапуска выглядит следующим образом:
public class SparkTest {
public static void main(String[] args) {
Service spark = ignite()
.ipAddress("127.0.0.1")
.port(3141);
// Should be a post(), using get() so I can test from a browser.
spark.get("/Stop", (req, res) -> { spark.stop(); return true; });
spark.awaitInitialization();
System.out.println("Initialized at: " + Instant.now().toString());
spark.awaitStop();
System.out.println("Stopped at: " + Instant.now().toString());
// I want to start a new service here with a new address and/or port.
}
}
Я ожидаю, что сообщение «Initialized at» будет распечатано немедленно, но сообщение «Stopped at» должно не печатать до тех пор, пока я не попробую "http://127.0.0.1: 3141 / Stop " из браузера.
Однако происходит то, что оба сообщения печатаются почти сразу в последовательности.
Initialized at: 2020-02-28T17:20:31.291Z
Stopped at: 2020-02-28T17:20:31.291Z
Принципиально, я хочу, чтобы способ прекратить Запущенный в аренду сервис, убедитесь, что он полностью завершен, затем запустите новый сервис, все в работающей в данный момент JVM.