更新时间:2024-01-23 GMT+08:00

连接数据库

使用SSL证书连接

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

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

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

    • 连接到单节点:
      mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&ssl=true
    • 连接到副本集:
      mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica&ssl=true
    • 连接到集群:
      mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&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");
                  // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全;
                  // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
                  String password = System.getenv("EXAMPLE_PASSWORD_ENV");
                  System.setProperty("javax.net.ssl.trustStorePassword", password);
                  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
    • 连接到副本集:
      mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica
    • 连接到集群:
      mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin
      表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 
            // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全;
            // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
            String userName = System.getenv("EXAMPLE_USERNAME_ENV");
            String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV");
    	ConnectionString connString = new ConnectionString("mongodb://" + userName + ":" + rwuserPassword + "@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"); 
            } 
    }
    }