Я нахожусь в процессе извлечения основной функциональности из более старого приложения и «оборачиваю» его в лямбду, чтобы обеспечить его в облачной среде 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 есть настройка, которую я могу использовать для его отключения?