aws / serverless-java-container

A Java wrapper to run Spring, Spring Boot, Jersey, and other apps inside AWS Lambda.
https://aws.amazon.com/serverless/
Apache License 2.0
1.47k stars 551 forks source link

AWS lambda : Spring boot 3 Servlet application having webflux dependency for web client #622

Open bajajyog opened 11 months ago

bajajyog commented 11 months ago

To help us debug your issue fill in the basic information below using the options provided

Serverless Java Container version: `2.0.0.M2

Implementations: `Spring Boot 3

Framework version: eg SpringBoot 3.1.2

Frontend service: REST API /ALB

Deployment method: eg SAM, Serverless Framework, Console

Scenario

Describe what you are trying to accomplish I am having Spring boot 3 Microservice deployed as AWS lambda. This microservice contains Webflux dependnecy for Spring Reactive WebClient. I have excluded Netty dependency from WebFlux. AWS Java Serverless library considering AWS lambda as Reactibe but I want it to be Servlet.

Expected behavior

Describe how you would expect the application to behave Please provide way to set up servlet web application type even it contains web flux dependency. or Check if spring web dependency is available, it should be servlet application

Spring is considering Reactive WebClient as synchronous in case spring web dependency is available

Actual behavior

Describe what you are seeing instead

Reactive web application type is considered by library

Steps to reproduce

Provide code samples we can use to reproduce the issue as part of our integration tests. If there is a public repository for the misbehaving application link to it here

handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Class.forName(System.getenv(APPLICATION)));

Full log output

Paste the full log output from the Lambda function's CloudWatch logs

logs
mbfreder commented 10 months ago

Hi. To set up Servlet web application type, You can create your handler this way:

handler = new SpringBootProxyHandlerBuilder<AwsProxyRequest>()
                                .defaultProxy()
                                .servletApplication()
                                .springBootApplication(Class.forName(System.getenv(APPLICATION)))
                                .buildAndInitialize();

servletApplication() sets your application type to Servlet.

bajajyog commented 10 months ago

Thanks for your quick feedback. Let me test thhis.

deki commented 10 months ago

@bajajyog do you need additional help or can we resolve this issue?