spring boot quartz job scheduling

Hello everyone,

In the last post, we have seen how to create an email scheduling application in spring boot with quartz scheduler and mysql as database. We created CRUD(Create, Read, Update and Delete) operations on scheduling functionality.  

We also created one time schedules with Simple triggers.  

In this post, we are going to see how to do the implement the same functionality with another relational database named PostgreSQL as called as Postgres.

Please feel free to explore the official docs to understand about it. 

Official documentation  - https://www.postgresql.org/

In this post, we are going to use the same codebase used in the last post  and integrate PostgreSQL as the database.

Please explore it to get an overview about the code base and quartz library.

Postgres Installation 

We are going to use docker. For installation of docker, refer https://docs.docker.com/engine/install/

After docker is installed. We will pull Postgres image and run it as a container. 

docker pull postgres

Type below command to verify the image is pulled.

docker images

Once the image is pulled successfully from docker registry, execute below command on terminal. This will run Postgres as a container exposing its default running post 5432 to host and it will run in detached mode i.e in background with the user and password as root. 

Feel free to set custom username and password.  I have named the container as postgres.

docker run -p 5432:5432 -e POSTGRES_PASSWORD=root  -e POSTGRES_USER=root --name postgres -d postgres


Database and tables Creation

Now logon to the docker container by executing the below command. You will land on the bash shell of the container. 

docker exec -it <containerId> bash


In the psql console, type below two commands 

create database quartz_scheduler;

grant all privileges on database quartz_scheduler to root;

You should be able to see the created database like below. 

docker postgres create database

Now, open another terminal and l copy the table creation sql script for postgres to docker container. 

cd quartz-scheduler/scripts/

docker cp postgres_tables.sql <containerId>:/

Once the above commands are executed, go the bash shell of the container, by executing the below command on the terminal two or by going to sql console on the terminal one and exiting the psql console by typing \q command

docker exec -it <containerId> bash

When you execute command ls, you should be able to see the sql file - postgres_tables.sql

Now let’s import the tables from the sql script copied from host by executing the below command.

psql -d quartz_scheduler -U root -f postgres_tables.sql

The above table will connect to database quartz_scheduler as user root and execute the sql commands.  

You should be able to see the tables created like below.

docker postgres psql

What’s next? 

Nothing. Run the application by executing the below command. 

 mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=local-postgres --spring.mail.password=<YOUR_SMTP_PASSWORD>"                         

Let’s recap a bit on what we have done so far. 

  • Added postgres dependency
  • Created the spring profile for postgres
  • Created the tables with the help of script. 

No code changes. Why? 

Why no code changes?

It is because of spring data JPA. The DAO layer  or persistence layer consists of lot of boiler plate code and simplifies it by making it possible to remove all the implementations artifacts. We define only an interface of the DAO and extending it with JpaRepository. The Spring data programming model automatically create an implementation for our Dao interface. 

In Standard Dao, we get CRUD operations. For custom queries, refer - https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa

This is the reason, we don’t have any code changes in any layer. 

Testing the application

Our application is up now. Like the previous post with MySQL database. Let’s create the mail schedule and test it. 

Go to the swagger - http://localhost:8080/swagger-ui/index.html

Creating the mail schedule

  • Request

spring boot quartz scheduler cron expression

  • Response

spring boot quartz auto create table

  • Mail received at the specified time

quartz springboot scheduling

List the mail schedule

This will list all the mail schedules scheduled.

  • Request

mail scheduling with quartz scheduler

  • Response

Delete the schedule

We can only delete the schedules not fired as all schedules created are one time schedules. Once fired, they are marked deleted. 

  • Request

  • Response

spring boot quartz scheduler delete schedule

Postman Collection

You can find the postman collection of all APIs here - Postman collection. Please find the create and update APIs JSON request body below

Keep Experimenting 🔎 

Keep Learning 🚀

Post a Comment