Spring Data MongoDB 教程

基于 Java 注册 Mongo 实例

本章将介绍基于 @Configuration 配置类来配置 com.mongodb.client.MongoClient 的实例,以及通过 MongoClientFactoryBean 容器去创建  com.mongodb.client.MongoClient 的实例。

直接实例化 MongoClient

以下示例显示了使用基于 Java 的 bean 元数据去注册 com.mongodb.client.MongoClient 的实例。例如:

(1)配置类

package com.hxstrive.springdata.mongodb.config;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类
 * @author hxstrive.com 2022/12/21
 */
@Configuration
public class BaseJavaConfig {

    /**
     * 使用标准的 Mongo 驱动 API 来创建一个 com.mongodb.client.MongoClient 实例
     */
    @Bean
    public MongoClient mongoClient() {
        return MongoClients.create("mongodb://localhost:27017");
    }

}

(2)创建客户端类,验证 MongoClient 对象实例可用,如下:

package com.hxstrive.springdata.mongodb;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class BaseJavaConfigTest {

    @Autowired
    private MongoClient mongoClient;

    @Test
    void contextLoads() {
        System.out.println("mongoClient=" + mongoClient);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        // 获取 test 数据库中所有的集合名称
        MongoIterable<String> mongoIterable = mongoDatabase.listCollectionNames();
        for(String name : mongoIterable) {
            System.out.println(name);
        }
    }

}

运行示例,输出结果如下:

mongoClient=com.mongodb.client.internal.MongoClientImpl@4debbf0
inventory
phrase
test
orders
ex_entity_test
ex_entity_test1
map_reduce_example
users

MongoClientFactoryBean 实例化 MongoClient

在上一种方法中我们使用标准的 com.mongodb.client.MongoClient 实例,下面则介绍通过 Spring 的 MongoClientFactoryBean 容器来实例化 MongoClient。

与直接实例化 com.mongodb.client.MongoClient 实例相比,MongoClientFactoryBean 的优势在于它还为容器提供了 ExceptionTranslator 实现,该实现可将 MongoDB 异常转换为 Spring 的 DataAccessException 层次结构中的异常,用于有 @Repository 注解的数据访问类。

下面的例子显示了一个基于 Java 的 Bean 元数据的例子,它支持对拥有 @Repository 注解类进行异常转换。通过使用 Spring 的 MongoClientFactoryBean 注册 com.mongodb.client.MongoClient 对象,并启用 Spring 的异常转换支持。

(1)配置类

package com.hxstrive.springdata.mongodb.config;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoClientFactoryBean;

/**
 * 配置类
 * @author hxstrive.com 2022/12/21
 */
@Configuration
public class BaseJavaConfig {

    /**
     * 创建com.mongob.client.MongoClient实例的工厂Bean
     */
    @Bean
    public MongoClientFactoryBean mongoClientFactoryBean() {
        MongoClientFactoryBean mongo = new MongoClientFactoryBean();
        mongo.setHost("localhost");
        return mongo;
    }

}

(2)创建客户端类,验证使用 MongoClientFactoryBean 对象创建 MongoClient 实例,如下:

package com.hxstrive.springdata.mongodb;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoClientFactoryBean;

@SpringBootTest
class BaseJavaFactoryBeanConfigTest {

    @Autowired
    @Qualifier("mongoClientFactoryBean")
    private MongoClientFactoryBean mongoClientFactoryBean;

    @Test
    void contextLoads() throws Exception {
        System.out.println("mongoClientFactoryBean=" + mongoClientFactoryBean);
        MongoClient mongoClient = mongoClientFactoryBean.getObject();
        if(null == mongoClient) {
            System.err.println("mongoClient is NULL");
            return;
        }

        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        // 获取 test 数据库中所有的集合名称
        MongoIterable<String> mongoIterable = mongoDatabase.listCollectionNames();
        for(String name : mongoIterable) {
            System.out.println(name);
        }
    }

}

运行客户端,输出如下:

mongoClientFactoryBean=org.springframework.data.mongodb.core.MongoClientFactoryBean@4eb9f2af
inventory
phrase
test
orders
ex_entity_test
ex_entity_test1
map_reduce_example
users
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号