DEV Community

Ângelo Galvão
Ângelo Galvão

Posted on

Red Hat's Spring Boot application on OpenShift 4

Do you know that Red Hat offers and support its own brand of Spring Boot libraries? Do you know that Red Hat also offers libraries that makes build and deploy on OpenShift easier?


In this quick article you will learn how to build and deploy an example application on OpenShift 4!


First, let's review the environment and versions:

  • Openshift Container Platform 4.14
  • Red Hat build of Spring Boot 2.7
  • Java 11

Diclaimer

This article expects that you have some knowledge on Spring Boot and Openshift

Use Red Hat libraries

Fix your libraries

Starting with version 2.7 of Spring Boot, instead of shipping its own version of Spring Boot libraries, Red Hat strategy is to allow the use of the same official version of Spring Boot and only override the components that Red Hat offers with its own version.
The most notable example is the Undertow web container, which is offered on version 2.2.26.SP2-redhat-00001 at the time of this writing. This is how you override the libraries:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>    
        <!-- Exclude the Tomcat dependency -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

<dependency>
    <groupId>io.undertow</groupId>
    <artifactId>undertow-core</artifactId>
    <version>2.2.26.SP2-redhat-00001</version>
    <scope>compile</scope>
</dependency>
Enter fullscreen mode Exit fullscreen mode

Visit Red Hat Spring Boot Component details page to a list of components and versions that overrides the provide Spring Boot libraries.

Include the Dekorate dependency

The dekorate.io is a new project that facilitates build and deploying your application on OpenShift. It uses annotations to decorate your application with OpenShift own resources. To use it, first add the dependency in the pom.xml of your project.

<dependency>
    <groupId>io.dekorate</groupId>
    <artifactId>openshift-annotations</artifactId>
    <version>2.11.5.redhat-00017</version>
</dependency>
Enter fullscreen mode Exit fullscreen mode

Annotate your application

To take advantage of the Dekorate library, annotate your application with @OpenshiftApplication annotation to configure how it will be deployed in OpenShift. In this example, the application will run 3 replicas and a Route object will be created.

@SpringBootApplication
@OpenshiftApplication(replicas = 3, expose = true) 
public class SpringBootExampleAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootExampleAppApplication.class, args);
    }

}
Enter fullscreen mode Exit fullscreen mode

Set the s2i builder image

In some clusters, the default s2i builder image is incorrectly running pods with Java 8 version instead of Java 11. To fix that, add the following property in application.properties Spring Boot file:

dekorate.s2i.builder-image=registry.access.redhat.com/ubi9/openjdk-11:latest
Enter fullscreen mode Exit fullscreen mode

Finally, deploy your application

Now, the final step is to deploy your application on Openshift. Just run the following command on the application root folder after properly login on OpenShift cluster with the oc client library:

./mvnw clean install -Ddekorate.deploy=true
Enter fullscreen mode Exit fullscreen mode

If everything runs correctly, your application will be running on 3 pods and a be accessible from a route.

What is next?

Did you like this article? Then, visit the example application repository in Git Hub to get more details on how to build and deploy Red Hat own version of Spring Boot on Openshift 4.

Top comments (1)

Collapse
 
rmcampos profile image
Ricardo Campos

Wow!! So straight forward! I need to try this and see it running. Thanks for sharing.