Prerequisites
- JDK 17 or later
- Maven
- Docker and Docker Compose installed on your machine
- IDE (IntelliJ IDEA, Eclipse, etc.)
Step 1: Set Up a Spring Boot Project
Use Spring Initializr to create a new project with the following configuration:
- Project: Maven Project
- Language: Java
- Spring Boot: 3.2.x
- Dependencies: Spring Web, Spring Data MongoDB
Download and unzip the project, then open it in your IDE.
Example Spring Boot Application
Create a simple Spring Boot application that interacts with MongoDB.
1.1 Application Class
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
1.2 Entity Class
Create a Student
entity in the com.example.demo.entity
package.
package com.example.demo.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "students")
public class Student {
@Id
private String id;
private String name;
private String email;
// Getters and setters
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
1.3 Repository Interface
Create a StudentRepository
interface in the com.example.demo.repository
package.
package com.example.demo.repository;
import com.example.demo.entity.Student;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface StudentRepository extends MongoRepository<Student, String> {
}
1.4 Service Class
Create a StudentService
class in the com.example.demo.service
package.
package com.example.demo.service;
import com.example.demo.entity.Student;
import com.example.demo.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StudentService {
@Autowired
private StudentRepository studentRepository;
public List<Student> getAllStudents() {
return studentRepository.findAll();
}
public Student saveStudent(Student student) {
return studentRepository.save(student);
}
}
1.5 REST Controller
Create a StudentController
class in the com.example.demo.controller
package.
package com.example.demo.controller;
import com.example.demo.entity.Student;
import com.example.demo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping("/students")
public List<Student> getAllStudents() {
return studentService.getAllStudents();
}
@PostMapping("/students")
public Student saveStudent(@RequestBody Student student) {
return studentService.saveStudent(student);
}
}
1.6 application.properties
Configuration
Configure your application to use MongoDB. In the src/main/resources
directory, create or update the application.properties
file.
# src/main/resources/application.properties
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=testdb
Step 2: Create Docker Compose Configuration
Docker Compose allows you to define and run multi-container Docker applications. You will create a docker-compose.yml
file to define the services for your Spring Boot application and MongoDB database.
2.1 Create docker-compose.yml
Create a docker-compose.yml
file in the root directory of your project.
version: '3.8'
services:
mongodb:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
app:
image: demo-app
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
environment:
SPRING_DATA_MONGODB_HOST: mongodb
SPRING_DATA_MONGODB_PORT: 27017
SPRING_DATA_MONGODB_DATABASE: testdb
depends_on:
- mongodb
volumes:
mongo_data:
Explanation:
mongodb
: Defines the MongoDB service.image
: Specifies the Docker image to use.ports
: Maps the container port to the host port.volumes
: Persists the MongoDB data.
app
: Defines the Spring Boot application service.depends_on
: Ensures the MongoDB service is started before the Spring Boot application.environment
: Sets the MongoDB host, port, and database for the Spring Boot application.
2.2 Create a Dockerfile
Create a Dockerfile
in the root directory of your project.
# Use the official OpenJDK base image
FROM openjdk:17-jdk-alpine
# Set the working directory inside the container
WORKDIR /app
# Copy the built jar file into the container
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
# Expose port 8080
EXPOSE 8080
# Run the application
ENTRYPOINT ["java", "-jar", "app.jar"]
Step 3: Build and Run the Application
3.1 Build the Jar File
Run the following command to build the jar file of your Spring Boot application:
./mvnw clean package
3.2 Build and Run Docker Compose
Run the following command to build and start the Docker Compose services:
docker-compose up --build
3.3 Verify the Application
Open a web browser or a tool like Postman and navigate to the following URL to test the endpoints:
-
Retrieve all students:
- URL:
http://localhost:8080/students
- Method:
GET
- URL:
-
Create a new student:
- URL:
http://localhost:8080/students
- Method:
POST
- Body:
{ "name": "Ramesh Fadatare", "email": "ramesh.fadatare@example.com" }
- URL:
Conclusion
In this tutorial, you have learned how to set up and run a Spring Boot application with MongoDB using Docker Compose. We covered:
- Setting up a Spring Boot project with MongoDB.
- Creating a Dockerfile for the Spring Boot application.
- Creating a
docker-compose.yml
file to define the services. - Building and running the application using Docker Compose.
By following these steps, you can easily manage and deploy your Spring Boot application and its dependencies using Docker Compose, enabling seamless interaction with MongoDB.
Comments
Post a Comment
Leave Comment