Spring Boot: live reload with Docker

- 3 mins


Summary


Overview

When we develop web applications with Spring Boot, we have to restart the server to pick up all our changes. This kills productivity. Spring Boot Developers Tools provides solutions to automatically pick up changes without a complete server restart.

The Problem With Server Restarts

When we develop our applications (web or RESTful API), we want to be able to test our changes quickly. Typically, in the Java world, we need to restart the server to pick up changes.

That’s where Spring Boot Developer Tools comes into the picture.

Adding Spring Boot Developer Tools to your project is very simple. First, add this dependency to your Spring Boot Project gradle.build:

compile 'org.springframework.boot:spring-boot-devtools'

Dockerizer

Create a file in the root of the project, called ‘Dockerfile’, I’ve used this Dockerfile’s template:

FROM openjdk:11-jre

CMD ["gradle"]

ENV GRADLE_HOME /opt/gradle
ENV GRADLE_VERSION 5.3.1

ARG GRADLE_DOWNLOAD_SHA256=1c59a17a054e9c82f0dd881871c9646e943ec4c71dd52ebc6137d17f82337436
RUN set -o errexit -o nounset \
    && echo "Downloading Gradle" \
    && wget --no-verbose --output-document=gradle.zip "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" \
    \
    && echo "Checking download hash" \
    && echo "${GRADLE_DOWNLOAD_SHA256} *gradle.zip" | sha256sum --check - \
    \
    && echo "Installing Gradle" \
    && unzip gradle.zip \
    && rm gradle.zip \
    && mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \
    && ln --symbolic "${GRADLE_HOME}/bin/gradle" /usr/bin/gradle \
    \
    && echo "Adding gradle user and group" \
    && groupadd --system --gid 1000 gradle \
    && useradd --system --gid gradle --uid 1000 --shell /bin/bash --create-home gradle \
    && mkdir /home/gradle/.gradle \
    && chown --recursive gradle:gradle /home/gradle \
    \
    && echo "Symlinking root Gradle cache to gradle Gradle cache" \
    && ln -s /home/gradle/.gradle /root/.gradle

USER gradle
VOLUME "/home/gradle/.gradle"
WORKDIR /home/gradle

RUN set -o errexit -o nounset \
    && echo "Testing Gradle installation" \
    && gradle --version

Info: this is the official Gradle Docker Hub

Create a file in the root of the project, called ‘docker-compose.yml’:

version: '3.3'
services:
  spring-boot-test:
    build:
      context: ./
      dockerfile: Dockerfile  
    volumes:
      - ./:/app
    working_dir: /app
    command: sh run.sh
    ports:
      - 8080:8080

And create another file in the root of the project, called ‘run.sh’:

#!/bin/bash
gradle --stop
gradle build --continuous --quiet &
gradle bootRun

Build and Run!

docker-compose build
docker-compose up
Licenza Creative Commons
This work is distributed under license Creative Commons Attribution 4.0 International.

Support Me

Marchi di accettazione PayPal
Mario Buonomo

Mario Buonomo

Follow the white rabbit

comments powered by Disqus
rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora