humbleCoder
humbleCoder

Reputation: 685

Change the version of the embedded tomcat using spring starter

The requirement is to use spring boot version 2.2.6.RELEASE however the tomcat version should be 9.0.37.

I tried to do it by excluding the tomcat starter from the spring-boot-starter-web depdendency like so :

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

And added the spring-boot-starter-tomcat separately which has the 9.0.37 tomcat version :

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <version>2.3.2.RELEASE</version>
        </dependency>

However even after doing so the version is not override and the following gets used :

Mar 11 2020 09:31:38 UTC
Apache Tomcat/9.0.33
9.0.33.0

Do we need to do anything else to override the tomcat version? Is it possible to override it by excluding started?

Update: The parent pom is a corporate parent pom and not the spring-boot-starter-parent. As per one of the answers we can simply override the tomcat.version property however my effective pom doesn't show it.

Upvotes: 0

Views: 5122

Answers (2)

Stephane Nicoll
Stephane Nicoll

Reputation: 33091

If you're not inheriting from spring-boot-starter-parent I can only guess that you import spring-boot-dependencies in your dependencies management somewhere.

The documentation covers what you need to do to override the tomcat version. Each tomcat artifact should be listed with the overridden version, before you imports spring-boot-dependencies. The list of artifacts can be found in spring-boot-dependencies.

Using a different version of the starter is wrong (you can't mix two Spring Boot versions in the same app) and will have no effect since dependency management is in control anyway. In other words, you'll get spring-boot-starter-web version 2.3.2.RELEASE indeed but all the artefacts that it brings will be managed by the dependency management (the tomcat version defined by version 2.2.6.RELEASE).

In that particular case of yours, upgrading to 2.2.9.RELEASE could also be an option as it provides dependency management for the tomcat version that you need.

Upvotes: 2

iamceph
iamceph

Reputation: 21

Well, this has been already answered.

For you, as you are using maven, you need to override the properties set in parent Spring pom.

<properties>
  ......
<tomcat.version>your_version</tomcat.version>
  ......
<properties>

For gradle, it is simple as

ext['tomcat.version'] = '8.5.34'

in your main build.gradle

Source: How to change embedded tomcat's version in existing spring boot app?

Upvotes: 0

Related Questions