How to prevent auto start of tomcat/jetty in Spring Boot when I only want to use RestTemplate

14,224

Solution 1

Spring Boot is not going to start a web container if it's not present. spring-web does not provide any embedded container. You may want to analyse the dependencies of your project (try mvn dependency:tree).

If you want to make sure a web server is not started in your spring boot application, you can set the following configuration key

spring.main.web-application-type=none

Or you can use the SpringApplicationBuilder

new SpringApplicationBuilder(YourApp.class)
        .web(WebApplicationType.NONE).run(args);

Solution 2

Since Spring Boot 2.0.0 this property is deprecated and following is the new way:

spring.main.web-application-type=none

This change is because Spring Boot the support for reactive server.

Solution 3

You can just close the app according to https://spring.io/guides/gs/async-method/. Although this still stars Tomcat, but will stop the app at the end without keeping the tread running.

SpringApplication.run(MyApp.class, args).close();
Share:
14,224
datree
Author by

datree

Updated on June 15, 2022

Comments

  • datree
    datree almost 2 years

    I want to use RestTemplate/TestRestTemplate by including the artifact in a SpringBoot application

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
    

    But this automatically starts Tomcat or Jetty. Is there a way to turn it off, or by not including the above artifact. TestRestTemplate is in the boot artifact, but not the base RestTemplate.