Spring Boot Access to MongoDB
Docker Compose Start MongoDB
services:
mongo:
image: mongo:7
ports:
- "37017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=admin123
volumes:
- mongo_data:/data/db
Template Approach
Maven dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
Configuration:
spring:
data:
mongodb:
uri: mongodb://admin:admin123@localhost:37017/wzk_test?authSource=admin
DAO:
@Autowired
private MongoTemplate mongoTemplate;
public List<WzkDocument> findAdults() {
Query q = new Query(Criteria.where("age").gte(18));
return mongo.find(q, WzkDocument.class);
}
Repository Approach
Entity:
@Document("wzk_document")
public class WzkDocument {
@Id
private String id;
@Indexed
private String name;
private Integer age;
}
Repository:
public interface WzkDocumentRepo extends MongoRepository<WzkDocument, String> {
WzkDocument findByName(String name);
}
Common Problem Troubleshooting
| Symptom | Root Cause | Fix |
|---|---|---|
| Cannot connect at startup | URI/port/auth incorrect | Correct spring.data.mongodb.uri |
| Repo null pointer | Entity missing @Id/generic mismatch | Add @Id, align generics |
| Slow query | No index/condition not hitting index | Add index or modify query |
| Transaction failure | Single machine not replica set | Change to replica set |