Expand Authors Top

If you have a few years of experience in the Java ecosystem and you’d like to share that with the community, have a look at our Contribution Guidelines.

Expanded Audience – Frontegg – Security (partner)
announcement - icon User management is very complex, when implemented properly. No surprise here.

Not having to roll all of that out manually, but instead integrating a mature, fully-fledged solution - yeah, that makes a lot of sense.
That's basically what Frontegg is - User Management for your application. It's focused on making your app scalable, secure and enjoyable for your users.
From signup to authentication, it supports simple scenarios all the way to complex and custom application logic.

Have a look:

>> Elegant User Management, Tailor-made for B2B SaaS

NPI – Spring Top – Temp – Non-Geo (Lightrun)

Get started with Spring 5 and Spring Boot 2, through the reference Learn Spring course:

NPI – Lightrun – Spring (partner)

We rely on other people’s code in our own work. Every day. It might be the language you’re writing in, the framework you’re building on, or some esoteric piece of software that does one thing so well you never found the need to implement it yourself.

The problem is, of course, when things fall apart in production - debugging the implementation of a 3rd party library you have no intimate knowledge of is, to say the least, tricky. It’s difficult to understand what talks to what and, specifically, which part of the underlying library is at fault.

Lightrun is a new kind of debugger.

It's one geared specifically towards real-life production environments. Using Lightrun, you can drill down into running applications, including 3rd party dependencies, with real-time logs, snapshots, and metrics. No hotfixes, redeployments, or restarts required.

Learn more in this quick, 5-minute Lightrun tutorial:

>> The Essential List of Spring Boot Annotations and Their Use Cases

1. Overview

In this tutorial, we'll show how to deploy an application from our Bootstrap a Simple Application using Spring Boot tutorial to Openshift.

As part of this we'll:

  • Install and configure Openshift development tools.
  • Create an Openshift project and MySQL deployment.
  • Configure the application for Spring Cloud Kubernetes.
  • Create and deploy the application in a container using the Fabric8 Maven plugin and test and scale the application.

2. Openshift Configuration

First, we need to install Minishift, the local single-node Openshift cluster, and the Openshift client.

Before using Minishift we need to configure permissions for the developer user:

minishift addons install --defaults
minishift addons enable admin-user
minishift start
oc adm policy --as system:admin add-cluster-role-to-user cluster-admin developer

Now we want to use the Openshift Console to create a MySQL service. We can launch the browser URL using:

minishift console

If you are not logged in automatically, then use developer/developer.

Create a project named baeldung-demo and then create a MySQL database service from the catalog. Provide baeldung-db for the Database Service, baeldung_db for the MySQL Database Name, and leave the other values at their defaults.

We now have a service and secrets for access to the database. Take note of the database connection url: mysql://baeldung-db:3306/baeldung_db

We also need to allow applications to read configuration like Kubernetes Secrets and ConfigMaps:

oc create rolebinding default-view --clusterrole=view \
  --serviceaccount=baeldung-demo:default --namespace=baeldung-demo

3. Spring Cloud Kubernetes Dependencies

We'll use the Spring Cloud Kubernetes project to enable the cloud-native APIs for Kubernetes that underpin Openshift:


We'll also use the Fabric8 Maven plugin to build and deploy the container:


4. Application Configuration

Now we need to provide configuration to ensure the correct Spring Profiles and Kubernetes Secrets are injected as environmental variables.

Let's create a YAML fragment in src/main/fabric8 so that the Fabric8 Maven plugin will use it when creating the deployment configuration.

We also need to add a section for the Spring Boot actuator since the default in Fabric8 still tries to access /health instead of /actuator/health:

      - env:
          value: mysql
              name: baeldung-db
              key: database-user
              name: baeldung-db
              key: database-password
            path: /actuator/health
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 180
            path: /actuator/health
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30

Next, we'll save a ConfigMap in openshift/configmap.yml, this contains the data for an application.properties with the MySQL URL:

apiVersion: v1
kind: ConfigMap
  name: spring-boot-bootstrap
  application.properties: |-

Before interacting with Openshift using the command line client we need to log in. In the top right of the web console is a user icon from which we can select the drop-down menu labeled “Copy Login Command”. Then use in a shell:

oc login --token=<some-token>

Let's make sure we're using the correct project:

oc project baeldung-demo

And then we upload the ConfigMap:

oc create -f openshift/configmap.yml

5. Deployment

During deployment, the Fabric8 Maven plugin tries to determine the configured port. The existing application.properties file in our sample application uses an expression to define the port, which the plugin is unable to parse. Therefore, we have to comment the line:


from the current application.properties.

We are now ready for deployment:

mvn clean fabric8:deploy -P openshift

We can watch the deployment progress until we see our application running:

oc get pods -w

Should provide a listing:

NAME                            READY     STATUS    RESTARTS   AGE
baeldung-db-1-9m2cr             1/1       Running   1           1h
spring-boot-bootstrap-1-x6wj5   1/1       Running   0          46s

Before we test the application, we need to determine the route:

oc get routes

Will print the routes in the current project:

NAME                    HOST/PORT                                                   PATH      SERVICES                PORT      TERMINATION   WILDCARD
spring-boot-bootstrap   spring-boot-bootstrap-baeldung-demo.             spring-boot-bootstrap   8080                    None

Now, let's verify that our application is working by adding a book:

http POST http://spring-boot-bootstrap-baeldung-demo. \
  title="The Player of Games" author="Iain M. Banks"

Expecting the following output:

HTTP/1.1 201 
    "author": "Iain M. Banks",
    "id": 1,
    "title": "The Player of Games"

6. Scaling the Application

Let's scale the deployment to run 2 instances:

oc scale --replicas=2 dc spring-boot-bootstrap

And we can use the same steps as earlier, then, to watch it deploy, get the routes, and test the endpoint.

Openshift provides for a wide range of options for managing performance and scaling beyond the scope of this article.

7. Conclusion

In this tutorial, we:

  • Installed and configured the Openshift development tools and local environment
  • Deployed a MySQL service
  • Created a ConfigMap and Deployment configuration to provide database connection properties
  • Built and deployed a container for our configured Spring Boot application, and
  • Tested and scaled the application.

For more details, check out the detailed Openshift documentation.

The complete source code of our examples here is, as always, over on GitHub.

Spring bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

Generic footer banner
Comments are closed on this article!