连接DDS实例的常用方式
本节介绍了四种连接DDS实例的方式:
- mongo shell连接
- python mongo客户端
- java mongo客户端
- 基于Spring MongoTemplate操作MongoDB
mongo shell连接
- 前提条件
- 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。
curl ip:port
返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。
- 在MongoDB官网,下载与数据库实例版本号一致的客户端安装包。解压后获取其中的“mongo”文件,并上传到弹性云服务器。
- 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
- 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。
- 连接命令
- SSL开启
./mongo ip:port --authenticationDatabase admin -u username -p password --ssl --sslCAFile $path to certificate authority file --sslAllowInvalidHostnames
- SSL关闭
./mongo ip:port --authenticationDatabase admin -u username -p password
表1 参数说明 参数
说明
ip
如果通过弹性云服务器连接,“ip”是主机IP,即“基本信息”页面该实例的“内网地址”。
如果通过连接了公网的设备访问,“ip”为该实例已绑定的“弹性公网IP”。
port
端口,默认8635,当前端口,参考“基本信息”页面该实例的“数据库端口”。
username
当前用户名。
password
当前用户的密码。
path to certificate authority file
SSL证书的路径。
- SSL开启
- 注意事项
- 如果开启SSL,连接命令中必须包含“--ssl”和“--sslCAFile”选项。
- 数据库认证“--authenticationDatabase”必须为“admin”,rwuser用户必须要在admin上认证。
更多信息,请参见《文档数据库服务快速入门》中各实例类型下“连接实例”的内容。
python mongo客户端
- 前提条件
- 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。
返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。
- 在弹性云服务器上安装Python以及第三方安装包pymongo。推荐使用pymongo2.8版本。
- 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
- 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。
- 连接代码
- SSL开启
import ssl import os from pymongo import MongoClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV rwuser = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file}) dbs = connection.database_names() print "connect database success! database names is %s" % dbs
- SSL关闭
import ssl import os from pymongo import MongoClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV rwuser = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000) dbs = connection.database_names() print "connect database success! database names is %s" % dbs
- SSL开启
- 注意事项
- {mydb}代表要连接数据库的名称。
- URL中的认证数据库必须为“admin”,即“authSource=admin”。
java mongo客户端
- 前提条件
- 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。
返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。
- 参考MongoDB兼容性列表,下载兼容数据库实例版本的mongo jar包。
- 在弹性云服务器上安装jdk。
- 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
- 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。
- 连接代码
用keytool工具手动生成trustStore:
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全;
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
String password = System.getenv("EXAMPLE_PASSWORD_ENV");
keytool -import -file /var/chroot/mongodb/CA/ca.crt -keystore /home/Mike/jdk1.8.0_112/jre/lib/security/mongostore -storetype pkcs12 -storepass ${password}
- “/var/chroot/mongodb/CA/ca.crt”为根证书路径。
- “/home/Mike/jdk1.8.0_112/jre/lib/security/mongostore”为生成的trustStore的路径。
- SSL开启
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关闭
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 { 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); MongoClient mongoClient = new MongoClient(addrs,credentials); 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() ); } } }
基于Spring MongoTemplate操作MongoDB
- 使用介绍
本章节介绍如何使用Spring集成的MongoDB,使用MongoTemplate操作MongoDB。详情请参考mongo官网。
- 前提条件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency>
- 配置指导
spring: data: mongodb: #MongoDB配置,作为参考 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV"); uri: mongodb://" + userName + ":" + rwuserPassword + "@192.***.***.***:8635,192.***.***.***:8635/${mongodb.database} database: ${mongodb.database}
- 开发指导
/** * mongoDB执行 */ @Autowired private MongoTemplate template; /** * 日志配置 */ @Autowired private LoggingProperties properties; @Override public void write(BaseLog businessLog, LoggingOption option) { if (template != null) { LoggingConfig config = properties.getBusinessConfig(businessLog.getCategory()); String collection = config.getMeta().get("collection"); if (StringUtils.isNotEmpty(collection)) { Object data = mapping(businessLog, config); template.save(data, collection); if (log.isDebugEnabled()) { log.debug("save audit log to mongodb successfully!, message: {}", StringEscapeUtils.escapeJava(TransformUtil.toJsonByJackson(businessLog))); } } else { log.warn("mongo log write log failed, mongoconfig is null"); } } else { log.warn("mongo log write log failed, mongoTemplate is null"); } }
- 注意事项
- SSL方式连接,需要手动生成trustStore文件。
- 认证数据库必须为“admin”,之后再切换至业务数据库。