Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.
Get started with mocking and improve your application tests using our Mockito guide:
Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.
Get started with understanding multi-threaded applications with our Java Concurrency guide:
Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:
Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.
But these can also be overused and fall into some common pitfalls.
To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:
Get started with Spring and Spring Boot, through the Learn Spring course:
>> LEARN SPRINGExplore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:
Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.
I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.
You can explore the course here:
Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.
Get started with Spring Data JPA through the guided reference course:
Refactor Java code safely β and automatically β with OpenRewrite.
Refactoring big codebases by hand is slow, risky, and easy to put off. Thatβs where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.
Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions β one for newcomers and one for experienced users. Youβll see how recipes work, how to apply them across projects, and how to modernize code with confidence.
Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.
1. Overview
In this article, weβre going to cover setting up a Spring Boot application on Heroku using Spring Cloud Connectors.
Heroku is a service that provides hosting for web services. Also, they provide a large selection of third-party services, called add-ons, that provide everything from system monitoring to database storage.
In addition to all of this, they have a custom CI/CD pipeline that integrates seamlessly into Git that expedites development into production.
Spring supports Heroku through itβs Spring Cloud Connectors library. Weβll be using this to configure a PostgreSQL data source in our application automatically.
Letβs jump into writing the app.
2. Spring Boot Book Service
First, letβs create a new simple Spring Boot service.
3. Heroku Sign Up
Now, we need to sign up for a Heroku account. Letβs go to heroku.com and click on the sign-up button in the top right corner of the page.
Now that weβve got an account we need to get the CLI tool. We need to navigate to the heroku-cli installation page and install this software. This will give us the tools we need to complete this tutorial.
4. Create Heroku Application
Now that we have the Heroku CLI letβs go back to our app.
4.1. Initialize Git Repository
Heroku works best when using git as our source control.
Letβs begin by going to the root of our application, the same directory as our pom.xml file, and running the command git init to create a git repository. Then run git add . and git commit -m βfirst commitβ.
Now weβve got our application saved to our local git repository.
4.2. Provision Heroku Web App
Next, letβs use the Heroku CLI to provision a web server on our account.
First, we need to authenticate our Heroku account. From the command line run heroku login and follow the instructions for logging in and creating an SSH key.
Next, run heroku create. This will provision the web server and add a remote repository that we can push our code to for deployments. Weβll also see a domain printed in the console, copy this domain so that we can access it later.
4.3. Push Code to Heroku
Now weβll use git to push our code to the new Heroku repository.
Run the command git push heroku master to send our code to Heroku.
In the console output we should see logs indicating the upload was successful then their system will, download any dependencies, build our application, run tests (if present), and deploy the app if everything goes smoothly.
That is it -we now have our application publicly deployed to a web server.
5. Test In-Memory on Heroku
Letβs make sure our app is working. Using the domain from our create step, letβs test our live application.
Letβs issue some HTTP requests:
POST https://{heroku-domain}/books HTTP
{"author":"baeldung","title":"Spring Boot on Heroku"}
We should get back:
{
"title": "Spring Boot on Heroku",
"author": "baeldung"
}
Now letβs try to read the object we just created:
GET https://{heroku-domain}/books/1 HTTP
This should return:
{
"id": 1,
"title": "Spring Boot on Heroku",
"author": "baeldung"
}
That all looks good, but in production, we should be using a permanent data store.
Letβs walk through provisioning a PostgreSQL database and configuring our Spring app to use it.
6. Adding PostgreSQL
To add the PostgreSQL database, run this command heroku addons:create heroku-postgresql:hobby-dev
This will provision a database for our web server and add an environment variable that provides the connection information.
Spring Cloud Connector is configured to detect this variable and set up the data source automatically given that Spring can detect that we want to use PostgreSQL.
To let Spring Boot know that weβre using PostgreSQL, we need to make two changes.
First, we need to add a dependency to include the PostgreSQL drivers:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
Next, letβs add properties so that Spring Data Connectors can configure the database according to its available resources.
In src/main/resources create an application.properties file and add the following properties:
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.maxActive=10
spring.datasource.maxIdle=5
spring.datasource.minIdle=2
spring.datasource.initialSize=5
spring.datasource.removeAbandoned=true
spring.jpa.hibernate.ddl-auto=create
This will pool our database connections and limit our applicationβs connections. Heroku limits the number of active connections in a development tier database to 10 and so we set our max to 10. Additionally, we set the hibernate.ddl property to create so that our book table will be created automatically.
Finally, commit these changes and run git push heroku master. This will push these changes up to our Heroku app. After our app starts, try running tests from the previous section.
The last thing we need to do is change the ddl setting. Letβs update that value as well:
spring.jpa.hibernate.ddl-auto=update
This will instruct the application to update the schema when changes are made to the entity when the app is restarted. Commit and push this change like before to have the changes pushed to our Heroku app.
We didnβt need to write a custom data source integration for any of this. Thatβs because Spring Cloud Connectors detects that weβre running with Heroku and using PostgreSQL β and automatically wires up the Heroku data source.
5. Conclusion
We now have a running Spring Boot app in Heroku.
Most of all, the simplicity of going from a single idea to a running application makes Heroku a solid way to deploy.
To find out more about Heroku and all the tools, it offers we can read more on heroku.com.
