【HelloMongoDB】MongoDB首個java程式及除錯
程式
package lsq.HelloMongoDb; import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; public class Demo { public static void main( String args[] ){ try{ // 連線到 mongodb 服務 @SuppressWarnings("resource") MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // 連線到資料庫 MongoDatabase mongoDatabase = mongoClient.getDatabase("Demo"); System.out.println(" --- 連線到資料庫 Demo 成功"); //建立集合 mongoDatabase.createCollection("test"); System.out.println(" --- 集合 Demo.test 建立成功"); MongoCollection<Document> collection = mongoDatabase.getCollection("test"); System.out.println(" --- 集合 Demo.test 選擇成功"); // 插入文件 Document document = new Document("title", "MongoDB"). append("description", "database"). append("likes", 100). append("by", "Fly"); List<Document> documents = new ArrayList<Document>(); documents.add(document); collection.insertMany(documents); System.out.println(" --- 文件 Demo.test.MongoDB 插入成功"); //檢索所有文件 /** * 1. 獲取迭代器FindIterable<Document> * 2. 獲取遊標MongoCursor<Document> * 3. 通過遊標遍歷檢索出的文件集合 * */ FindIterable<Document> findIterable = collection.find(); MongoCursor<Document> mongoCursor = findIterable.iterator(); while(mongoCursor.hasNext()){ System.out.println("檢索結果:"+mongoCursor.next()); } }catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } } }
除錯過程
問題#1 缺少依賴包
新增所需要的依賴包 mongo-java-driver.jar mongodb-driver.jar mongodb-driver-sync.jar
編輯 pom.xml, 引入依賴 :
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.6.3</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver</artifactId> <version>3.6.3</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>3.8.2</version> </dependency>
問題#2 找不到主類
$ java -jar HelloMongoDb-0.0.1-SNAPSHOT.jar
HelloMongoDb-0.0.1-SNAPSHOT.jar中沒有主清單屬性
解決方案1)編輯 pom.xml,指定主類
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <mainClass>lsq.HelloMongoDb.Demo</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>default</id> <goals> <goal>jar</goal> </goals> <phase>package</phase> </execution> </executions> </plugin>
對應的執行指令:
$ java -jar HelloMongoDb-0.0.1-SNAPSHOT.jar
解決方案2)java指令中指定主類
$ java -classpath HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo
解決方案3) hadoop jar 指令指定主類
$ hadoop jar HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo
問題#3 找不到依賴類
Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/MongoClient
at lsq.HelloMongoDb.Chapter5.main(Chapter5.java:12)
Caused by: java.lang.ClassNotFoundException: com.mongodb.MongoClient
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
解決方案1)
將mongo-java-driver.jar中的com/ org/ 兩個子目錄提取之後,加入 HelloMongoDb-0.0.1-SNAPSHOT.jar 包中。
解決方案2)
編輯pom.xml , 要求複製所需依賴包:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- ${project.build.directory}為Maven內建變數,預設為target -->
<outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
<!-- 表示是否不包含間接依賴的包 -->
<excludeTransitive>true</excludeTransitive>
<!-- 表示複製的jar檔案去掉版本資訊 -->
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
則相關依賴jar包會進入 應用jar包的lib 目錄下, 對應的執行指令:
$ hadoop jar HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo
註明:應用jar包的lib目錄下有依賴包,但是 java 執行指令還是無法找到, hadoop jar 指令可以找到。
問題#4 MongoSocketOpenException
driver.cluster: Exception in monitor thread while connecting to server idx022:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:62)
[[email protected] ~/data]$ hadoop jar HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo
18/11/01 11:42:41 INFO driver.cluster: Cluster created with settings {hosts=[idx022:27017], mode=
SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Connect to database successfully
Authentication:false
18/11/01 11:42:41 INFO driver.cluster: Exception in monitor thread while connecting to server idx022:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:62)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMon
itor.java:114) at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: 拒絕連線
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59)
at com.mongodb.connection.SocketStream.open(SocketStream.java:57)
... 3 more
編輯原始碼:
-- MongoClient mongoClient = new MongoClient( "idx022" , 27017 );
++MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
備註:啟動 mongd 所用指令: $ mongod --dbpath ~/data/mongodb
最終執行結果
$ hadoop jar HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo
18/11/01 15:35:43 INFO driver.cluster: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
--- 連線到資料庫 Demo 成功
2018-11-01T15:35:43.979+0800 I NETWORK [listener] connection accepted from 127.0.0.1:42122 #22 (1 connection now open)
18/11/01 15:35:43 INFO driver.cluster: Cluster description not yet available. Waiting for 30000 ms before timing out
2018-11-01T15:35:43.992+0800 I NETWORK [conn22] received client metadata from 127.0.0.1:42122 conn22: { driver: { name: "mongo-java-driver", version: "3.6.3" }, os: { type: "Linux", name: "Linux", architecture: "amd64", version: "2.6.32-358.el6.x86_64" }, platform: "Java/Oracle Corporation/1.8.0_60-b27" }
18/11/01 15:35:44 INFO driver.connection: Opened connection [connectionId{localValue:1, serverValue:22}] to localhost:27017
18/11/01 15:35:44 INFO driver.cluster: Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4, 0, 3]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=6518364}
2018-11-01T15:35:44.046+0800 I NETWORK [listener] connection accepted from 127.0.0.1:42123 #23 (2 connections now open)
2018-11-01T15:35:44.047+0800 I NETWORK [conn23] received client metadata from 127.0.0.1:42123
conn23: { driver: { name: "mongo-java-driver", version: "3.6.3" }, os: { type: "Linux", name: "Linux", architecture: "amd64", version: "2.6.32-358.el6.x86_64" }, platform: "Java/Oracle Corporation/1.8.0_60-b27" }
18/11/01 15:35:44 INFO driver.connection: Opened connection [connectionId{localValue:2, serverValue:23}] to localhost:27017
2018-11-01T15:35:44.062+0800 W COMMAND [conn23] the autoIndexId option is deprecated and will be removed in a future release
2018-11-01T15:35:44.062+0800 I STORAGE [conn23] createCollection: Demo.test with generated UUID: 19ef07c0-d55d-44de-b0f4-a4170c41f139
--- 集合 Demo.test 建立成功
--- 集合 Demo.test 選擇成功
--- 文件 Demo.test.MongoDB 插入成功
檢索結果:Document{{_id=5bdaacd0e6a7bf1578ea4ae6, title=MongoDB, description=database, likes=100, by=Fly}}
2018-11-01T15:35:44.196+0800 I NETWORK [conn22] end connection 127.0.0.1:42122 (1 connection now open)
2018-11-01T15:35:44.196+0800 I NETWORK [conn23] end connection 127.0.0.1:42123 (0 connections now open)
原始碼參考
相關推薦
【HelloMongoDB】MongoDB首個java程式及除錯
程式 package lsq.HelloMongoDb; import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoCl
【練習題】構造方法 編寫Java程式,模擬簡單的計算器。
package day09; /*1.【練習題】構造方法 編寫Java程式,模擬簡單的計算器。 定義名為Number的類,其中有兩個整型資料成員n1和n2,應宣告為私有。編寫構造方法,賦予n1和n2初始值,再為該類定義加(addition)、減(subtration)、乘(
【演算法】給定兩個字串,確定一個字串重新排列後能否變成另一個字串(java實現)
分析:兩個字串的長度都不相同時,不可能是變位詞 package com.billkang.algorithm; import java.util.Arrays; /** * 給定兩個字串,確
【轉】MongoDB配置文件說明
details 5.0 key 第一個 pen log data 端口 this 啟動MongoDB有2種方式,一是直接指定配置參數,二是指定配置文件。這裏先介紹配置文件,啟動方式如下: mongod --config /etc/mongodb.conf 配置如下:ve
【BioCode】將多個蛋白質序列分成單個的txt文檔
span package bsp -1 http println != show ade 代碼說明: fasta格式的蛋白質序列,一個txt裏面有很多蛋白質序列,計算ss、pssm或disorder score時候都需要單條計算,需要分開。 分割前: 分割後: show
【六】MongoDB管理之副本集
bottom reference mil 沒有 options 過程 新版 會有 滿足 一、復制介紹 所謂的復制就是在多個主機之間同步數據的過程。 1、數據冗余及可用性 復制技術提供數據冗余及可用性,在不同的數據庫服務器上使用多個數據副本,復制技術防止單個數據庫服務器出現數
【九】MongoDB管理之安全性
方法 開啟 oot backup 由於 alt 集群管理 失敗 exec 要保證一個安全的MongoDB運行環境,DBA需要實施一些控制保證用戶或應用程序僅僅訪問它們需要的數據。這些措施包括但不限於: 認證機制 基於角色的訪問控制 加密 審計 一、認證機制 認證是驗證客
【三】MongoDB文檔的CURD操作
其中 iat options match imu 可選 不能 dal 多個 一、插入文檔 使用insert方法插入文檔到一個集合中,如果集合不存在創建集合,有以下幾種方法: db.collection.insertOne({}):(v3.2 new) #插入一個文檔到集
【一】MongoDB安裝及配置
.org root 終端 配置 conn tin serve cal 數據文件 一、MongoDB安裝 1、下載並解壓 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.0.tgz
【二】MongoDB入門
ger 劃分 lob .com 字符 help further 如果 keys 下面是mongodb的一些基本概念: 文檔是MongoDB中數據的基本單元,類似關系數據庫中的行。 集合,是存儲文檔的容器,類似關系數據庫中的表。 MongoDB的單個實例容納多個數據庫,每個
【四】MongoDB索引管理
過期 則無 面向 ssa 距離 comment fields 字段名 不包含 一、索引介紹 在mongodb中,索引用來支持高效查詢。如果沒有索引,mongodb必須在整個集合中掃描每個文檔來查找匹配的文檔。但是如果建立合適的索引,mongodb就可以通過索引來限制檢查的文
【轉】JavaScript MD5 與 Java MessageDigest 加密後的值相同
cda padding highlight xe7 net abs algorithm urn -a function integer(n) { return n%(0xffffffff+1); } function shr(a,b) { a=integer(a);
【XSY1295】calc n個點n條邊無向連通圖計數 prufer序列
ring pre end ctime 節點 splay 按順序 sin algorithm 題目大意 求\(n\)個點\(n\)條邊的無向連通圖的個數 \(n\leq 5000\) 題解 顯然是一個環上有很多外向樹。 首先有一個東西:\(n\)個點選\(k\
【轉】MongoDB學習筆記(查詢)
順序 god ... ive HR 操作 方式 mar obj 原文地址 MongoDB學習筆記(查詢) 基本查詢: 構造查詢數據。 > db.test.findOne() { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a")
【NOI】9272 偶數個三
pla 數字 原理 OS 動態 sin 多少 xxxx 遍歷 題目鏈接:bajdcc/ACM描述在所有的N位數中,有多少個數中有偶數個數字3?結果模12345。(1<=N<=10000) 樣例輸入2 樣例輸出73 方法一:窮舉評價:最簡單又是效率最低的方法。缺陷
【PAT】B1023 組個最小數(20 分)
最小數 [1] ace pac 存儲位置 bool algorithm tdi include #include<stdio.h> #include<algorithm> using namespace std; struct number{
【PAT】B1006 換個格式輸出整數(15 分)
pac sca printf alloc sin clu malloc main () #include<cstdio> #include<malloc.h> #include<algorithm> using namespace std
【轉】JMeter完成一個java請求的壓測
span 依賴 壓測 雙擊 led long urn 相關 記錄 JMeter完成java請求的壓力測試詳解以及問題總結 原文地址:http://www.cnblogs.com/zhaoxd07/p/4895224.html 作者:KK_Yolan
【實戰】MongoDB 分片原理概述 + 部署 MongoDB 分片群集 +【源碼包】
balancer test 概述 b- 使用 說明 中一 瓶頸 標記 目錄: 1· MongoDB 分片概述2· 部署 MongoDB 分片群集3· MongoDB 分片管理4· 推薦 MongoDB 、MySQL 基礎文章5· 文章總結 MongoDB 分片概述 1)什
【轉載】linux作業系統與應用程式的main函式
來源:https://blog.csdn.net/h542723151/article/details/52154871 這幾天一直在糾結: main函式是程式的入口,一個程式啟動後,經過bootloader的初始化就該經main函式進入C語言的世界,但是linux中每個應用程式的開始都是