Как инициализировать MongoClient один раз при весенней загрузке и экспортировать его для использования его методов? - PullRequest
1 голос
/ 07 мая 2020

Здравствуйте, я пытаюсь экспортировать MongoClient после успешного подключения в Spring Boot, и я пытаюсь использовать его в других файлах, чтобы мне не приходилось вызывать соединение каждый раз, когда мне нужно внести изменения в моя база данных MongoDB.

Подключение довольно простое, но цель состоит в том, чтобы один раз подключить приложение к моей базе данных, а затем использовать его где угодно, импортировав его в любой файл Java.

Спасибо

1 Ответ

1 голос
/ 08 мая 2020

Вот несколько способов создания экземпляра MongoClient, его настройки и использования в приложении Spring Boot.

(1) Регистрация экземпляра Mon go с использованием Java метаданные на основе:

@Configuration
public class AppConfig {
    public @Bean MongoClient mongoClient() {
        return MongoClients.create();
    }
}

Использование из CommandLineRunner метода run ( все примеры выполняются аналогично ):

@Autowired 
MongoClient mongoClient;

// Retrieves a document from the "test1" collection and "test" database.
// Note the MongoDB Java Driver API methods are used here.
private void getDocument() {
    MongoDatabase database = client.getDatabase("test");
    MongoCollection<Document> collection = database.getCollection("test1");
    Document myDoc = collection.find().first();
    System.out.println(myDoc.toJson());
}


(2) Настроить с использованием класса AbstractMongoClientConfiguration и использовать с MongoOperations:

@Configuration
public class MongoClientConfiguration extends AbstractMongoClientConfiguration {

    @Override
    public MongoClient mongoClient() {
        return MongoClients.create();
    }

    @Override
    protected String getDatabaseName() {
        return "newDB";
    }
}

Обратите внимание, что вы можете установить имя базы данных (newDB), к которой вы можете подключиться. Эта конфигурация используется для работы с базой данных MongoDB с использованием API-интерфейсов Spring Data MongoDB: MongoOperations (и его реализация MongoTemplate) и MongoRepository.

@Autowired 
MongoOperations mongoOps;

// Connects to "newDB" database, and gets a count of all documents in the "test2" collection.
// Uses the MongoOperations interface methods.
private void getCollectionSize() {
    Query query = new Query();
    long n = mongoOps.count(query, "test2");
    System.out.println("Collection size: " + n);
}


(3) Настройте с помощью класса AbstractMongoClientConfiguration и используйте с MongoRepository

Используя ту же конфигурацию MongoClientConfiguration класс ( выше в topi c 2 ), но дополнительно добавьте аннотацию @EnableMongoRepositories. В этом случае мы будем использовать MongoRepository методы интерфейса для получения данных коллекции как Java объектов.

Репозиторий:

@Repository
public interface MyRepository extends MongoRepository<Test3, String> {

}

Класс Test3.java POJO, представляющий test3 документ коллекции:

public class Test3 {

    private String id;
    private String fld;

    public Test3() {    
    }

    // Getter and setter methods for the two fields
    // Override 'toString' method
    ...
}

Следующий метод получения документов и печати как Java объектов:

@Autowired 
MyRepository repository;

// Method to get all the `test3` collection documents as Java objects.
private void getCollectionObjects() {
    List<Test3> list = repository.findAll();
    list.forEach(System.out::println);
}
...