Spring Application Deployed with Kubernetes
Step by step building an application using Spring Boot and deployed via Docker on Kubernetes with Helm
full course- Setup: IDE and New Project
- Create the Data Repository
- Building a Service Layer
- Create a REST Controller
- Logging, Tracing and Error Handling
- Documentation and Code Coverage
- Database as a Service
- Containerize the Service With Docker
- Docker Registry
- Automated Build Pipeline
- Helm for Deployment
- Setting up a Kubernetes Cluster
- Automating Deployment (for CICD)
- System Design
- Messaging and Event Driven Design
- Web UI with React
- Containerizing our UI
- UI Build Pipeline
- Put the UI in to Helm
- Creating an Ingress in Kubernetes
- Simplify Deployment
- Conclusion and Review
Its very easy to get a spring boot microservice up and running. You can read any variety of articles on medium (or other service) on how to do that. However, there’s little about how to do some of the more complicated things that you need in order to support a deployed application and even fewer that link them all together. This series of articles is intended to draw a clear line between all of the stages in order to help guide you to a deployed application with multiple services.
Setup Your Development Environment
This first article is specifically about setting up a development environment for a service. Although this is generally straightforward, I’m going to cover some tools that make it really easy to initialize an environment from scratch.
Create the Github Repository
We’ll need a version control repository first. Log into your github account and create a new repository. We’re going to make a public repository called medium-customer
as a public repository. Initialize the repository with a readme (to give us something to clone) and add a gitignore file configured for java
. Clone that repository into your local environment.
Create Your Project Workspace
In the next step we’re going to use spring initializr to initialize our spring boot project. However, before we do that we’re going to make it easy on ourselves by using our intellij plugins to do the heavy lifting. Install the following plugins into intellij (if they’re not installed already):
- Spring Assistant
- MapStruct Support
- Lombok
- Database Navigator.
Once you have the plugins installed, use File/New Project…
to create a new project.
Now setup your maven project
And choose the dependencies in the next screen.
Hopefully, we’ll get a chance to use them all, I’m including some that we might not use directly. The important ones for now are
- Lombok
- Spring web
- H2 database
- Spring data jpa.
Finish up creating the project. Make sure that the project location points to the directory that we cloned the github repository into.
We also need to include mapstruct, since we’ll be using that for mapping and translating our java beans. Add the following properties and dependencies to your maven pom.xml file
<properties>
...
<org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
</properties>
<dependencies>
...
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
...
</dependencies>
Build and Commit
Now lets make sure that we’ve got something that actually works. Spring initializr gives us some basic project structure and tests, so it will confirm that the compile and spring boot context initialization works.
Run:
maven clean install
You should see a successful build
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ medium-customer ---
[INFO] Building jar: C:\workspace\github\medium-customer\target\medium-customer-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.2.6.RELEASE:repackage (repackage) @ medium-customer ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ medium-customer ---
[INFO] Installing C:\workspace\github\medium-customer\target\medium-customer-0.0.1-SNAPSHOT.jar to C:\Users\brian\.m2\repository\com\brianrook\medium\medium-customer\0.0.1-SNAPSHOT\medium-customer-0.0.1-SNAPSHOT.jar
[INFO] Installing C:\workspace\github\medium-customer\pom.xml to C:\Users\brian\.m2\repository\com\brianrook\medium\medium-customer\0.0.1-SNAPSHOT\medium-customer-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.037 s
[INFO] Finished at: 2020-03-27T15:11:20-06:00
[INFO] ------------------------------------------------------------------------
Now lets commit and push to master for our initial project commit.
git checkout -b initial
git add .
git commit -m "initial commit"
git push
git checkout master
git merge --squash initial
git commit -m "Initial commit"
git push
0 comments on “Setup: IDE and New Project”Add yours →