Я развернул свой Spring Boot на Aws Lambda и хочу две вещи
1. Вызовите некоторые из моих контроллеров через шлюз Api.
2. Запланируйте события так, чтобы они вызывали мои другие службы внутри контейнера Spring.
Я могу делать обе вещи, когда я делаю это отдельно в двух разных функциях.
Для события расписания я использую RequestHandler.
@Override
public AwsEventResponse handleRequest(AwsEventRequest input, Context context) {
// invoke spring service here
return new AwsEventResponse();
}
А для Api я использую RequestStreamHandler, поэтому он передает запрос Spring MVC:
@Override
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
// do nothing here, controllers will be invoked
}
Но две разные функции не разделяют один контейнер Spring.
Я хочу иметь одну функцию со следующей конфигурацией:
Resources:
HelloFunction:
Type: AWS::Serverless::Function
Properties:
Handler: org.ksapala.rainaproximator.aws.LambdaHandler::handleRequest
Runtime: java8
CodeUri: build/distributions/rain-aproximator-0.0.1-SNAPSHOT.zip
MemorySize: 3008
Policies: AWSLambdaBasicExecutionRole
Timeout: 60
Events:
GetResource:
Type: Api
Properties:
Path: /{proxy+}
Method: any
ScanSchedule:
Type: Schedule
Properties:
Schedule: cron(0/2 * ? * * *)
И отправка запроса в зависимости от типа вызова. Итак, я хочу вот что:
@Override
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
if (this is event) {
//handle event
} else {
// this is request from Api Gateway so pass it to Spring Mvc
}
}
Я пытался реализовать обе функции в одном классе, реализуя оба RequestHandler и RequestStreamHandler, но это не сработало. Я также пытался использовать RequestHandler, но он не обрабатывает Mvc. И когда я попробовал RequestStreamHandler, он не работает с событиями.