Deploy our Spring boot application for free.
In this blog, we are going to deploy out spring boot application with PostgreSQL using to
- Web site on render.com
- PostgreSQl on neon.com
Create an Application
We can create application that can interact with html and controller layer of our application. Then, service layer that can interact with Repository layer.
Frontent (Thyme Leaf)
I am going to create html that can integrate with thyme leaf.
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title> first page </title> </head> <body> <div> <h1>Heading name</h1> <p><span th:text="${word}"></span></p> </div> <div> <h1>list</h1> <p><span th:text="${word}"></span></p> </div> </body> </html>
Create a html in spring boot
Go to template and create our html pages and Go to static from create js and CSS files. I paste above code on the index.html.
Spring boot Controller layer
I create controller class which can map the html with java class.
@Controller public class ControllerClass { @GetMapping public String getInitialisePage(Model model) { String p = "ravana"; model.addAttribute("word",p); return "index"; } }
Create a Repository Interface
we are going to do dataBase configuaration and spring JPA here.
Configuration of Database and JPA
Configure the Database and JPA on Application.Properties.
spring.datasource.url = ${DATASOURCE_URL} spring.datasource.username= ${DATASOURCE_USERNAME} spring.datasource.password= ${DATASOURCE_PASSWORD} spring.datasource.driver-class-name=org.postgresql.Driver spring.jpa.hibernate.ddl-auto = update spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.database-platform= org.hibernate.dialect.PostgreSQLDialect
Now, the database url, userName, password are assigned as Environment variables. So, now we want to assign as in different approach by IDE.
Using Eclipse or Spring tool suit IDE
- Right click on our project.
- Run as -> run configurations
- click the environment and set the name and value.
- Eg. name = DATASOURCE_URL and value = our jbdc url
- Eg. name = DATASOURCE_USERNAME and value = our username
- Eg. name = DATASOURCE_PASSWORD and value = our Password
Create jar file from our project
When we create Spring boot project we have .mvn file. Delete the test related dependency and class.
./mvnw clean package
If not work copy this below code. This is work on linux only
export SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/login" export SPRING_USERNAME="postgres" export DATASOURCE_PASSWORD="1234" //don't be panic as run again to run ./mvnw clean package // else give this command // remove the test depandancy and delete src/main/test. // ./mvnw clean package
Create a docker file
Download docker and docker desktop on our system. Create a file on our project, named as Dockerfile.
# Use an official Maven image to build the Spring Boot app FROM maven:3.8.4-openjdk-17 AS build # Set the working working directory WORKDIR /app # Copy the pom.xml and install dependencies COPY pom.xml . RUN mvn dependency:go-offline # Copy the source code and build the application COPY src ./src RUN mvn clean package -DskipTests # This will download the all depandencies # Use an official OpenJDK image to run the application FROM openjdk:17-jdk-slim #Set the working directory WORKDIR /app # Copy the built JAR file from the build stage COPY --from=build /app/target/file-name.jar . # my fileName is demo-0.0.1-SNAPSHOT so COPY --from=build /app/target/demo-0.0.1-SNAPSHOT.jar # Expose port 8080 EXPOSE 8080 # Specify the command to run the application ENTRYPOINT ["java", "-jar", "/app/notes-0.0.1-SNAPSHOT.jar"] # change the notes-0.0.1-SNAPSHOT.jar into fileName demo-0.0.1-SNAPSHOT # ENTRYPOINT ["java", "-jar", "/app/demo-0.0.1-SNAPSHOT.jar"]
Create Docker image
After create docker file. Then run the below command on terminal. It will generate a docker image. Check the image on your docker or not.
docker build -t demo_deployment . docker tag demo-deployment kalaiarasan23/demo-deployment:latest docker push kalaiarasan23/demo-deployment:latest
Host our Database
Go to neon.tech, create account we got free 500MB space DB. Now create project and add.
Important is to get the configutation because we will use in application part.
postgresql://username:password2@ep-shiny-butterfly-a1el75x8-pooler.ap-southeast-1.aws.neon.tech/DB?sslmode=require Select the environmental variable on render.com DATASOURCE_URL=jdbc:postgresql://ep-shiny-butterfly-a1el75x8-pooler.ap-southeast-1.aws.neon.tech/DB?sslmode=require DATASOURCE_USERNAME=username DATASOURCE_PASSWORD=password
Host the Web application
Go to render.com and open dashboard -> Click new web services ->click image. Enter the environment variable at last. Deploy our web site and verify the server online or not.