Функция микронавта: плавное выключение после выполнения задачи
Я нахожусь в процессе извлечения основных функций из старого приложения и "обертывания" их в лямбда-выражении, чтобы предоставить их в облачной среде AWS. Для этого я создал функцию Micronaut. На первый взгляд, функция Micronaut работает нормально.
Однако я заметил, что выполнение не останавливается после выполнения своей задачи. Дальнейшая проверка показала, что унаследованный код создал несколько пользовательских потоков, и их отключение находится вне моего контроля. Чтобы исправить это, я выполняю System.exit(0)
вручную с задержкой в одну секунду (чтобы убедиться, что выход возвращается перед выходом):
@FunctionBean("the-function")
public class SomeFunction extends FunctionInitializer implements Function<SomeInput, SomeOutput> {
@Override
public SomeOutput apply(SomeInput intput) {
SomeOutput result = ...
shutdownDelayed();
return result;
}
private void shutdownDelayed() {
Executors
.newScheduledThreadPool(1)
.scheduleWithFixedDelay(() -> System.exit(0), 1, 1, TimeUnit.SECONDS);
}
public static void main(String... args) {
// ...
}
}
Есть ли лучший способ гарантировать, что функция Micronaut отключится сама по себе, даже если пользовательские потоки все еще существуют? Или в AWS есть настройка, с помощью которой я могу его выключить?