更新时间:2024-02-07 GMT+08:00

连接数据库

使用SSL证书连接

该方式属于SSL连接模式,需要下载SSL证书,通过证书校验并连接数据库。

您可以在“实例管理”页面,单击实例名称进入“基本信息”页面,单击“数据库信息”模块“SSL”处的,下载根证书或捆绑包。

  1. 通过Java连接MongoDB数据库,代码中的Java链接格式如下:

    • 连接到副本集:
      mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica&ssl=true
      表1 参数说明

      参数

      说明

      <username>

      当前用户名。

      <password>

      当前用户的密码。

      <instance_ip>

      如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。

      如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。

      <instance_port>

      端口,默认8635,当前端口,参考“基本信息”页面该实例的“数据库端口”。

      <database_name>

      数据库名,即需要连接的数据库名。

      authSource

      鉴权用户数据库,取值为admin。

      ssl

      连接模式,值为true代表是使用ssl连接模式。

    连接MongoDB数据库的Java代码,可参考以下示例:

    import java.util.ArrayList;
    import java.util.List;
    import org.bson.Document;
    import com.mongodb.MongoClient;
    import com.mongodb.MongoCredential;
    import com.mongodb.ServerAddress;
    import com.mongodb.client.MongoDatabase;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.MongoClientURI;
    import com.mongodb.MongoClientOptions;
    public class MongoDBJDBC {
    public static void main(String[] args){
          try {
                  System.setProperty("javax.net.ssl.trustStore", "/home/Mike/jdk1.8.0_112/jre/lib/security/mongostore");
                  System.setProperty("javax.net.ssl.trustStorePassword", "****");
                  ServerAddress serverAddress = new ServerAddress("ip", port);
                  List addrs = new ArrayList();
                  addrs.add(serverAddress);
                  // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全;
                  // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
                  String userName = System.getenv("EXAMPLE_USERNAME_ENV");
                  String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV");
                  MongoCredential credential = MongoCredential.createScramSha1Credential("rwuser", "admin", rwuserPassword.toCharArray());
                  List credentials = new ArrayList();
                  credentials.add(credential);
                  MongoClientOptions opts= MongoClientOptions.builder()
                  .sslEnabled(true)
                  .sslInvalidHostNameAllowed(true)
                  .build();
                  MongoClient mongoClient = new MongoClient(addrs,credentials,opts);
                  MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
                  MongoCollection collection = mongoDatabase.getCollection("testCollection");
                  Document document = new Document("title", "MongoDB").
                  append("description", "database").
                  append("likes", 100).
                  append("by", "Fly");
                  List documents = new ArrayList();
                  documents.add(document);
                  collection.insertMany(documents);
                  System.out.println("Connect to database successfully");
                  } catch (Exception e) {
                  System.err.println( e.getClass().getName() + ": " + e.getMessage() );
             }
          }
    }

    样例代码:

    javac -cp .:mongo-java-driver-3.2.0.jar MongoDBJDBC.java
    java -cp .:mongo-java-driver-3.2.0.jar MongoDBJDBC

无证书连接

该方式属于SSL连接模式,但不对服务端进行证书校验,用户无需下载SSL证书。

  1. 通过Java连接MongoDB数据库实例,代码中的Java链接格式如下:

    • 连接到副本集:
      mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica
      表2 参数说明

      参数

      说明

      <username>

      当前用户名。

      <password>

      当前用户的密码。

      <instance_ip>

      如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。

      如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。

      <instance_port>

      端口,默认8635,当前端口,参考“基本信息”页面该实例的“数据库端口”。

      <database_name>

      数据库名,即需要连接的数据库名。

      authSource

      鉴权用户数据库,取值为admin。

    连接MongoDB数据库的Java代码,可参考以下示例:

    import com.mongodb.ConnectionString;
    import com.mongodb.reactivestreams.client.MongoClients;
    import com.mongodb.reactivestreams.client.MongoClient;
    import com.mongodb.reactivestreams.client.MongoDatabase;
    import com.mongodb.MongoClientSettings;
    public class MyConnTest { 
        final public static void main(String[] args) { 
    	try {
            // no ssl 
    	ConnectionString connString = new ConnectionString("mongodb://rwuser:****@192.*.*.*:8635,192.*.*.*:8635/test? authSource=admin");
    	MongoClientSettings settings = MongoClientSettings.builder()
    		.applyConnectionString(connString)
    		.retryWrites(true)
    		.build();
    	MongoClient mongoClient = MongoClients.create(settings);
    	MongoDatabase database = mongoClient.getDatabase("test");
         System.out.println("Connect to database successfully");  
    	} catch (Exception e) { 
                e.printStackTrace(); 
                System.out.println("Test failed"); 
            } 
    }
    } 

基于yml连接

  1. 通过yml连接MongoDB数据库的yml示例:

    • 连接到副本集:
      spring:
        data:
          mongodb:
            uri: mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica
      表3 参数说明

      参数

      说明

      <username>

      当前用户名。

      <password>

      当前用户的密码。

      <instance_ip>

      如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。

      如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。

      <instance_port>

      端口,默认8635,当前端口,参考“基本信息”页面该实例的“数据库端口”。

      <database_name>

      数据库名,即需要连接的数据库名。

      authSource

      鉴权用户数据库,取值为admin。

      通过yml连接MongoDB数据库的代码,可参考以下示例:
      • application.yml
        spring:
          data:
            mongodb:
              uri: mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica
      • ITestService.java
        package com.springboot.cli.service;
        public interface ITestService {
            long doCount();
        }
      • TestServiceImpl.java
        package com.springboot.cli.service.impl;
        import com.springboot.cli.service.ITestService;
        import lombok.RequiredArgsConstructor;
        import org.springframework.data.mongodb.core.MongoTemplate;
        import org.springframework.stereotype.Service;
        @Service
        @RequiredArgsConstructor
        public class TestServiceImpl implements ITestService {
            private final MongoTemplate mongoTemplate;
            @Override
            public long doCount() {
                return mongoTemplate.estimatedCount("coll");
            }
        }
      • MongodbApplicationTests.java
        package com.springboot.cli;
        import com.springboot.cli.service.impl.TestServiceImpl;
        import org.junit.jupiter.api.Test;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.boot.test.context.SpringBootTest;
        import org.springframework.stereotype.Service;
        @SpringBootTest
        @Service
        class MongodbApplicationTests {
            @Autowired
            TestServiceImpl testService;
            @Test
            void doCount() {
                System.out.println("coll count is: " + testService.doCount());
            }
        }