serverless-java-container icon indicating copy to clipboard operation
serverless-java-container copied to clipboard

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

Open bajajyog opened this issue 1 year ago • 3 comments

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

bajajyog avatar Aug 19 '23 03:08 bajajyog

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.

mbfreder avatar Aug 21 '23 06:08 mbfreder

Thanks for your quick feedback. Let me test thhis.

bajajyog avatar Aug 21 '23 14:08 bajajyog

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

deki avatar Sep 18 '23 14:09 deki