引言

springboot整合是采用原生的mongo-driver 来实现,可以动态链接多个库,无需关注整合springboot,只要自己实现springboot-starter。快速入门文档:http://mongodb.github.io/mongo-java-driver/3.11/driver/getting-started/quick-start/#mongodb-driver-quick-start 。介绍的非常详细,完全可以操作入门。

pom依赖

本文采用的版本号是3.10.2版本

<dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-sync</artifactId>
        <version>3.10.2</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>2.0.1</version>
    </dependency>

只需要你在springboot框架中引入俩个依赖就可以操作,用原生的去操作更加灵活,个人不介意用mongo-template 用起来很不方便。

代码整合

配置文件参数

1、application.properties文件中加以下参数
server.port= 9009

mongo.properties.userName = bikeBos
#密码我这边不做展示了,自己的mongo 库的密码
mongo.properties.password = ****
mongo.properties.database = bikeBos

2、新增一个spring.factories文件在这里插入图片描述
文件参数:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.example.demo.mongo.MongoConfig

代码实现

采用springboot-starter的形式的去进行实现

package com.example.demo.config;


import com.example.demo.dao.MongoDao;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Author: xiaozhu13539
 * @Date: 2022/4/27
 */
@Configuration
@EnableConfigurationProperties(MongoProperties.class)
public class MongoConfig implements ApplicationListener<ContextRefreshedEvent> {

    @Resource
    private MongoProperties mongoProperties;

    @Resource
    private MongoDao mongoDao;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        mongoDao.buildMongoClient(mongoProperties);
    }
}

加载的实体参数:

package com.example.demo.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * @Author: xiaozhu13539
 * @Date: 2022/4/27
 */
@ConfigurationProperties(prefix = "mongo.properties")
@Data
public class MongoProperties {

    private String userName;

    private String password;

    private String database;

    private String ip;

    private Integer port;

}

构建mongoClient 和 Dao提供对外的查询方法,这里举例根据主键查询,其余的api根据我上面提供的快速入门来进行封装。

package com.example.demo.dao;

import com.alibaba.fastjson.JSONObject;
import com.example.demo.config.MongoProperties;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Author: xiaozhu13539
 * @Date: 2022/4/28
 */
@Service
public class MongoDao {

     //缓存client的数据源
     private final ConcurrentHashMap<String, MongoClient> daoMap = new ConcurrentHashMap<>();

    /**
     * client
     * @param mongoProperties
     */
     public void buildMongoClient(MongoProperties mongoProperties) {
        String userName = mongoProperties.getUserName();
        String password = mongoProperties.getPassword();
        String database = mongoProperties.getDatabase();
         MongoCredential credential = MongoCredential.createCredential(userName, database, password.toCharArray());

         MongoClientSettings settings = MongoClientSettings.builder()
                 .credential(credential)
                 //.applyToSslSettings(builder -> builder.enabled(true))
                 .applyToClusterSettings(builder ->
                         //ip 是mongo服务器的主机
                         builder.hosts(Arrays.asList(new ServerAddress("127.0.0.1", 27017))))
                 .build();

         MongoClient mongoClient = MongoClients.create(settings);

         daoMap.put("test", mongoClient);
     }

    /**
     * 获取注解
     * @param bikeNo
     * @return
     */
     public String getDataByUk(String bikeNo) {
         Bson bson = Filters.eq("bikeNo", "2100009315");
         MongoClient mongoClient = daoMap.get("test");

         MongoCollection<Document> mongoCollection = mongoClient.getDatabase("bikeBos").getCollection("bik4c");
         FindIterable<Document> documents = mongoCollection.find(bson);

         String result = "";
         for (Document document : documents) {

             result = JSONObject.toJSONString(document);
             break;
         }
         return result;
     }
}

整合很简单,深入得继续去研究mongo的官方文档。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐