- test: содержит коллекцию под названием people, содержащую документы, представляющие класс Person и Author.
- test2: содержит коллекцию под названием somethingElse, содержащую документы, представляющие Класс SomethingElse
Ниже приведен код, показывающий, как генерируются и запрашиваются тестовые данные, а также классы, с которыми они сопоставляются.
MongoConfig.java
package com.example.demo;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import lombok.Getter;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
@SpringBootApplication
public class MongoConfig extends AbstractMongoClientConfiguration {
@Getter
MongoClient client;
@Override
protected String getDatabaseName() {
return "test";
}
@Override
public MongoClient mongoClient() {
MongoClient client = MongoClients.create("mongodb://127.0.0.1:27017/test");
this.client = client;
return client;
}
}
TestData.java
package com.example.demo;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.UUID;
@Component
public class TestData {
@Autowired
MongoConfig config;
private static String FIRST_DB = "test";
private static String SECOND_DB = "test2";
private void insertFirstDatabase(){
MongoDatabase database = config.getClient().getDatabase(FIRST_DB);
MongoCollection collection = database.getCollection("people");
Document person = new Document().append("_id",UUID.randomUUID().toString())
.append("name","Larry").append("email","larry@gmail.com").append("_class","person");
Document author = new Document().append("_id",UUID.randomUUID().toString())
.append("name","Frank").append("email","frank@gmail.com").append("articleCount",1).append("active",true)
.append("_class","author");
collection.insertOne(person);
collection.insertOne(author);
}
private void insertSecondDatabase(){
Document somethingElseDocument = new Document().append("_id",UUID.randomUUID().toString())
.append("name","example document").append("_class","somethingElse");
config.getClient().getDatabase(SECOND_DB).getCollection("somethingElse").insertOne(somethingElseDocument);
}
public void insert(){
insertFirstDatabase();
insertSecondDatabase();
}
public void cleanUp() {
MongoDatabase firstDatabase = config.getClient().getDatabase(FIRST_DB);
firstDatabase.drop();
MongoDatabase secondDatabase = config.getClient().getDatabase(SECOND_DB);
secondDatabase.drop();
}
}
Test.java
package com.example.demo;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.UUID;
@Component
public class Test {
@Autowired
TestData testData;
@Autowired
MongoTemplate mongoTemplate;
@PostConstruct
public void startTest(){
testData.insert();
List
allPeople = mongoTemplate.findAll(Person.class);
for (Person person : allPeople) {
System.out.println(person.toString());
}
List otherEntities = mongoTemplate.findAll(SomethingElse.class);
for (SomethingElse entity : otherEntities) {
System.out.println(entity.toString());
}
SomethingElse newEntity = new SomethingElse(UUID.randomUUID().toString(),"wrong database");
mongoTemplate.insert(newEntity);
//Breakpoint here to view DB
testData.cleanUp();
}
}
Person.java
package com.example.demo;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "people")
@TypeAlias("person")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Person {
@Id
private String id;
private String name;
private String email;
@Override
public String toString(){
return this.getName() + " (PERSON)";
}
}
Author.java
package com.example.demo;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.PersistenceCreator;
import org.springframework.data.annotation.TypeAlias;
@TypeAlias("author")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
class Author extends Person{
private Integer articleCount;
private Boolean active;
@PersistenceCreator
public Author(String id, String name, String email, int articleCount, boolean active) {
super(id,name,email);
this.articleCount = articleCount;
this.active = active;
}
@Override
public String toString(){
return this.getName() + " (AUTHOR)";
}
}
pom.xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
4.0.3
com.example
demo
0.0.1-SNAPSHOT
MongoDb Multiple DBs
Demo project for Spring Boot
17
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-data-mongodb
4.1.0-M2
compile
org.projectlombok
lombok
1.18.42
compile
org.springframework.boot
spring-boot-maven-plugin
Подробнее здесь: https://stackoverflow.com/questions/799 ... -databases
Мобильная версия