對於MongoDB的Java驅動, 從2.10.0版本後,文檔中提醒Mongo類將會被廢除,現在開始都鼓勵使用MongoClient類。
下面示範一個Java程式如何使用最新的MongoClient類來對MongoDB寫操作。
首先假定已經有了一個Replica-set叢集,分別是d1, d2和 d3三台虛擬機器。
然後建立一個Maven構建的Java應用程式。使用了maven exec plugin用來方便執行jar包和定製參數。
看一下pom.xml:
<build> <plugins> <plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.2.1</version><executions> <execution> <goals> <goal>java</goal> </goals> </execution></executions><configuration> <mainClass>org.freebird.dbtool.App</mainClass> <arguments> <argument>d1,d2,d3</argument> </arguments></configuration> </plugin> </plugins> </build>
傳遞了三個參數,中間用,隔開,分別是不同的主機名稱:d1, d2, d3.
看看代碼初始化部分:
public static void main(String[] args) throws UnknownHostException {System.out.println(args[0]); String[] hosts = args[0].split(","); int portNumber = 27017; System.out.println(hosts[0]); System.out.println(hosts[1]); System.out.println(hosts[2]); MongoClient client = new MongoClient(Arrays.asList(new ServerAddress(hosts[0], portNumber), new ServerAddress(hosts[1], portNumber), new ServerAddress(hosts[2], portNumber))); MyApp.getInstance().setDbName("kaimei"); MyApp.getInstance().setClient(client);
這裡將三個host用,分割開後,建立三個ServerAddress對象,然後構建MongoClient對象。
同時建立了一個MyApp的singleton對象,存放這個MongoClient對象,並提供了getDB()方便日後擷取資料庫連接。
public class MyApp { private MyApp() { } public static MyApp getInstance() { return MyAppHolder.INSTANCE; } private static class MyAppHolder { private static final MyApp INSTANCE = new MyApp(); } @Getter @Setter String dbName; @Setter MongoClient client; public DB getDB() { return client.getDB(dbName); }}
以後在任何地方需要使用串連的時候,這樣使用:
public static void bind(final String address, final String userId) {DB db = MyApp.getInstance().getDB();DBCollection collection = db.getCollection(DISPLAY_COLLECTION);DBObject condition = new BasicDBObject();condition.put("address", address);DBObject field = new BasicDBObject();field.put("user_id", new ObjectId(userId));DBObject set = new BasicDBObject();set.put("$set", field);collection.update(condition, set, false, false); }
很簡單吧。