From d5fc4842bfb5cf93ce5c10ae8b97c1d1be506c50 Mon Sep 17 00:00:00 2001 From: "felix.Wang" Date: Thu, 10 Sep 2020 19:04:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0mongoDB=20=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=B9=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/reader/mongodbreader/KeyConstant.java | 5 +++++ .../plugin/reader/mongodbreader/MongoDBReader.java | 14 ++++++++++++-- .../reader/mongodbreader/util/MongoUtil.java | 14 ++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/KeyConstant.java b/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/KeyConstant.java index fbc83d51..195787e6 100644 --- a/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/KeyConstant.java +++ b/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/KeyConstant.java @@ -94,4 +94,9 @@ public class KeyConstant { public static boolean isDocumentType(String type) { return type.startsWith(DOCUMENT_TYPE); } + + /** + * mongodb url + */ + public static final String MONGO_URL="mongoUrl"; } diff --git a/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/MongoDBReader.java b/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/MongoDBReader.java index ba7f07f4..2b828c1e 100644 --- a/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/MongoDBReader.java +++ b/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/MongoDBReader.java @@ -47,6 +47,8 @@ public class MongoDBReader extends Reader { private String userName = null; private String password = null; + private String mongoDBUrl = null; + @Override public List split(int adviceNumber) { return CollectionSplitUtil.doSplit(originalConfig,adviceNumber,mongoClient); @@ -57,9 +59,12 @@ public class MongoDBReader extends Reader { this.originalConfig = super.getPluginJobConf(); this.userName = originalConfig.getString(KeyConstant.MONGO_USER_NAME, originalConfig.getString(KeyConstant.MONGO_USERNAME)); this.password = originalConfig.getString(KeyConstant.MONGO_USER_PASSWORD, originalConfig.getString(KeyConstant.MONGO_PASSWORD)); + this.mongoDBUrl = originalConfig.getString(KeyConstant.MONGO_URL); String database = originalConfig.getString(KeyConstant.MONGO_DB_NAME, originalConfig.getString(KeyConstant.MONGO_DATABASE)); String authDb = originalConfig.getString(KeyConstant.MONGO_AUTHDB, database); - if(!Strings.isNullOrEmpty(this.userName) && !Strings.isNullOrEmpty(this.password)) { + if (!Strings.isNullOrEmpty(mongoDBUrl)) { + this.mongoClient = MongoUtil.initMongoClientByURL(mongoDBUrl); + }else if(!Strings.isNullOrEmpty(this.userName) && !Strings.isNullOrEmpty(this.password)) { this.mongoClient = MongoUtil.initCredentialMongoClient(originalConfig,userName,password,authDb); } else { this.mongoClient = MongoUtil.initMongoClient(originalConfig); @@ -93,6 +98,8 @@ public class MongoDBReader extends Reader { private Object upperBound = null; private boolean isObjectId = true; + private String mongoDBUrl = null; + @Override public void startRead(RecordSender recordSender) { @@ -189,7 +196,10 @@ public class MongoDBReader extends Reader { this.password = readerSliceConfig.getString(KeyConstant.MONGO_USER_PASSWORD, readerSliceConfig.getString(KeyConstant.MONGO_PASSWORD)); this.database = readerSliceConfig.getString(KeyConstant.MONGO_DB_NAME, readerSliceConfig.getString(KeyConstant.MONGO_DATABASE)); this.authDb = readerSliceConfig.getString(KeyConstant.MONGO_AUTHDB, this.database); - if(!Strings.isNullOrEmpty(userName) && !Strings.isNullOrEmpty(password)) { + this.mongoDBUrl = readerSliceConfig.getString(KeyConstant.MONGO_URL); + if (!Strings.isNullOrEmpty(mongoDBUrl)) { + this.mongoClient = MongoUtil.initMongoClientByURL(mongoDBUrl); + } else if(!Strings.isNullOrEmpty(userName) && !Strings.isNullOrEmpty(password)) { mongoClient = MongoUtil.initCredentialMongoClient(readerSliceConfig,userName,password,authDb); } else { mongoClient = MongoUtil.initMongoClient(readerSliceConfig); diff --git a/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/util/MongoUtil.java b/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/util/MongoUtil.java index ae7a2dd3..3521e264 100644 --- a/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/util/MongoUtil.java +++ b/mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/util/MongoUtil.java @@ -11,6 +11,7 @@ import com.alibaba.datax.plugin.reader.mongodbreader.KeyConstant; import com.alibaba.datax.plugin.reader.mongodbreader.MongoDBReaderErrorCode; import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; @@ -87,4 +88,17 @@ public class MongoUtil { } return addressList; } + + public static MongoClient initMongoClientByURL(String mongoUrl) { + + try { + return new MongoClient(new MongoClientURI(mongoUrl)); + } catch (NumberFormatException e) { + e.printStackTrace(); + throw DataXException.asDataXException(MongoDBReaderErrorCode.ILLEGAL_VALUE, "不合法参数"); + } catch (Exception e) { + e.printStackTrace(); + throw DataXException.asDataXException(MongoDBReaderErrorCode.UNEXCEPT_EXCEPTION, "未知异常"); + } + } }