Я реализую функцию AWS Lambda с Java и сталкиваюсь с вопросом - как правильно высвобождать используемые ресурсы? В своей функции я выполняю различные вызовы некоторых ресурсов: выполняю запросы к БД, выполняю REST-вызовы сторонним сервисам (отправляю метрики StatsD, запускаем веб-хаки Slack и т. Д.), Взаимодействую с потоком Kinesys.
Не вдаваясь в детали, моя функция выглядит так:
public class RequestHandler {
private StatisticsService statsService; //Collect StatsD metrics
private SlackNotificationService slackService; //Send Slack notifications
private SearchService searchService; //Interact with DB
//Simplified version of constructor
public RequestHandler() {
this.statsService = new StatisticsService();
this.slackService = new SlackNotificationService();
this.searchService = new SearchService();
}
public LambdaResponse handleRequest(LambdaRequest request, Context context) {
/**
* Main method of function
* where business-logic is executed
* and all mentioned services are invoked
*/
}
}
И мой главный вопрос - где правильнее высвободить ресурсы, которые используются в моих сервисах, в конце метода handleRequest () (в таком случае мне нужно будет открывать их все снова при каждом следующем вызове Lambda- функция) или в методе finalize () класса RequestHandler?