Deploy Spring Boot application on external Tomcat

In this post, we will see how to deploy spring boot application on an external tomcat server. We are going to use Tomcat 7 (i.e apache-tomcat-7.0.94) for this tutorial. It is strongly recommended to follow the same step. Don’t change spring boot version in pom.xml, once you are able to run with 1.x then only go for 2.x spring boot version. We will provide dependency in pom.xml to exclude embedded tomcat so that we can further deploy our war file in external tomcat.

Creating a war file with name BootWarDeployment.war  using maven.

First, we will create war using maven then we will deploy it on external tomcat.

Open eclipse and create maven project, Don’t forget to check ‘Create a simple project (skip)’click on next. Fill all details(GroupId – BootWarDeployment, ArtifactId – BootWarDeployment and name – BootWarDeployment) and click on finish. Keep packaging as the jar.

Modify the pom.xml.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>BootWarDeployment</groupId>
	<artifactId>BootWarDeployment</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>BootWarDeployment</name>
	<packaging>war</packaging>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.8.RELEASE</version>
		<relativePath />
	</parent>


	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>
		
	</dependencies>

	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>

			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<fork>true</fork>
					<executable>C:\Program Files\Java\jdk1.8.0_131\bin\javac.exe</executable>
				</configuration>
			</plugin>


		</plugins>
	</build>
</project>

Modify this one where you have installed JDK

<configuration>
                <fork>true</fork>
                <executable>C:\Program Files\Java\jdk1.8.0_131\bin\javac.exe</executable>
 </configuration>

 

Create package com.bootwar and define all files controller class(BookController.java), Book.java and SpringMain.java in this package. We will keep this application simple. Our main purpose is to build(create war) and deploy the application on external Tomcat.

Our directory structure looks as below.

Deploy Spring Boot application on external Tomcat

Initially, we will have nothing in our target folder since I have had already given the build, we have BootWarDeployment.war in the target folder.


Book.java

package com.bootwar;

public class Book {
	int bookId;
	String bookName;
	String bookPrice;
	public int getBookId() {
		return bookId;
	}
	public void setBookId(int bookId) {
		this.bookId = bookId;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getBookPrice() {
		return bookPrice;
	}
	public void setBookPrice(String bookPrice) {
		this.bookPrice = bookPrice;
	}
	
 
}

BookController.java

package com.bootwar;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 

 
@RestController
public class BookController {
	
	@RequestMapping(value = "/simpleuri",method = RequestMethod.GET)
	@ResponseBody
    public Book getBook() {
    	Book book = new Book();
    	book.setBookId(109);
    	book.setBookName("book1");
    	book.setBookPrice("100");
    	return book;
	}
	
}

SpringMain.java

package com.bootwar;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@ComponentScan(basePackages="com.bootwar")
@SpringBootApplication
public class SpringMain extends SpringBootServletInitializer{
	
	@Override
    public SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringMain.class);
    }
 
	public static void main(String[] args) {
        SpringApplication.run(SpringMain.class, args);
    }
	


}

 

Since we are deploying war on external tomcat application.properties file is not mandatory.


 

Step 6 – We are good now, let’s create a war file using mvn clean install.

We can create a war file using a different way. Sometimes people use eclipse itself to build the application, also we can use the command prompt.  Here we will use CMD for the build.

Go to the code directory where we have pom.xml. For example currently, I have my code here

 

 

 

Open cmd and run command – mvn clean install

Deploy Spring Boot application on external Tomcat

 

 

Deploy the Spring Boot application on external Tomcat.

In target, folder war should be created with name BootWarDeployment.war.


Download Tomcat 7 and extract it.

Copy the war file and paste into the webapps folder.

 

Go to the bin folder and run the stratup.bat file. Our war file should deploy in tomcat.

Deploy Spring Boot application on external Tomcat

 

 

Testing of the example.

Our server has been started. Let’s test the URI which we have defined in the controller.

http://localhost:8081/BootWarDeployment/simpleuri

 

I have changed my port 8080 to 8081 in server.xml

 

That’s all about How to Deploy Spring Boot application on external Tomcat. If you face any issue please leave a comment.

Apache Tomcat docs.

Spring boot datasource configuration using tomcat
Deploy Spring boot war in JBoss EAP server.
Jboss 7 EPA datasource configuration using oracle and spring boot.
Deploy multiple war files in JBoss to different port.