Skip to Content
Technical Articles
Author's profile photo Jacky Liu

Deploy SpringBoot web Application(tomcat server) to BTP Kyma runtime

One of customers ask if  their existing  application deployed in tomcat server can be deployed into BTP runtimes . I think one option is BTP cloud foundry runtime. I checked the document , BTP cloud foundry has tomcat container. The tutorial Create a Java Application via Cloud Foundry Command Line Interface | Tutorials for SAP Developers give guidance about how. I tried it and if I follow the steps , I can succeed .

Then I think why not build docker image for the application run in Tomcat server and then deply the application into BTP Kyma runtime. I tried with springboot web application run with Tomcat server.

In this blog, I will share the steps :

Prerequisites:

1, Have installed Java JDK

2, Have installed Maven

3, Have installed docker

4, Have installed Intellij IDEA(Optional)

5, Kyma runtime has been activated in your BTP subaccount .

 

Step 1: Creat a SpringBoot application name tomaop

The following is the POM file .

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.8</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.sap</groupId>
  <artifactId>tomaop2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>tomaop2</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>11</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

The following is the controller class:

package com.sap.tomaop2.controller;
import com.sap.tomaop2.model.Employee;
import com.sap.tomaop2.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController

public class EmployeeController {

  @Autowired
  private  EmployeeService employeeService;

  @GetMapping(path = "/add/employee")
  public Employee createEmployee(@RequestParam("empId") String empId,@RequestParam("firstName") String firstName,@RequestParam("secondName") String secondName){
   return employeeService.createEmployee(empId,firstName,secondName);
  }
  @GetMapping(path = "/del/employee")
  public String deleteEmployee(@RequestParam("empId") String empId){
    employeeService.deleteEmployee(empId);
    return "The employe " + empId +" has been deleted";
  }
  
}

 

Run the application with the command: mvn  spring-boot:run

Test in browser:

 

Step 2: Buid docker file for the SpringBoot application

Add  google-jib plugin in pom file

Maintain docker account information in Intellij IDEA .

Run the following command to build the application:

mvn compile jib:buildTar

Check the generated tar file :

Load the tar file to Docker with following command:

docker load -i ./target/jib-image.tar

Check the image with the following command:

docker images | find “spring”

Push the image to docker hub with following command:

 

Step 3: Prepare Kyma deployment YAML file:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomaop
  labels:
    app: tomaop
spec:
  selector:
    matchLabels:
      app: tomaop
  strategy:
    rollingUpdate:
      maxUnavailable: 1
  replicas: 1
  template:
    metadata:
      labels:
        app: tomaop
    spec:
      containers:
        - image: registry.hub.docker.com/dockeraccount/springbootaop:latest
          imagePullPolicy: Always
          name: tomaop
          ports:
            - name: http
              containerPort: 8080
          env:
            - name: DEBUG
              value: "true"
            - name: RENEWCERT_JOB_CRON
              value: "00 00 */12 * * *"
          resources:
            requests:
              memory: "512Mi"
              cpu: "50m"
            limits:
              memory: "1000Mi"
              cpu: "100m"
---
apiVersion: v1
kind: Service
metadata:
  name: tomaop
  labels:
    app: tomaop
spec:
  ports:
    - name: http
      port: 8080
  selector:
    app: tomaop

Step 4: Deploy the SpringBoot Application to BTP Kyma runtime:

Uload previous step YAML file

 

Step 5:Create API Rule for the service:

Step 6:Test with Chrome:

This is just a simple test, the actual situation is much more complecated with other stuffs like persistance , authorization ,etc .

 

The ends!

Thanks for your time!

Best regards!

Jacky Liu

 

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.