MongoDB是介于關系數據庫和非關系數據庫之間的一種產品,文件的存儲格式為BSON(一種JSON的擴展),這里就主要介紹Java通過使用mongo-2.7.3.jar包實現mongodb連接池,具體的java代碼實現如下:
數據庫連接池配置參數:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
/** *@Description: mongo連接池配置文件 */ package cn.lulei.mongo.pool; public class MongoConfig { private static String userName; //用戶名 private static String pwd; //密碼 private static String[] host; //主機地址 private static int [] port; //端口地址 private static String dbName; //數據庫名 private static int connectionsPerHost = 20 ; //每臺主機最大連接數 private static int threadsAllowedToBlockForConnectionMultiplier = 10 ; //線程隊列數 private static boolean authentication = false ; //是否需要身份驗證 public static String getUserName() { return userName; } public static void setUserName(String userName) { MongoConfig.userName = userName; } public static String getPwd() { return pwd; } public static void setPwd(String pwd) { MongoConfig.pwd = pwd; } public static String[] getHost() { return host; } public static void setHost(String[] host) { MongoConfig.host = host; } public static int [] getPort() { return port; } public static void setPort( int [] port) { MongoConfig.port = port; } public static String getDbName() { return dbName; } public static void setDbName(String dbName) { MongoConfig.dbName = dbName; } public static int getConnectionsPerHost() { return connectionsPerHost; } public static void setConnectionsPerHost( int connectionsPerHost) { MongoConfig.connectionsPerHost = connectionsPerHost; } public static int getThreadsAllowedToBlockForConnectionMultiplier() { return threadsAllowedToBlockForConnectionMultiplier; } public static void setThreadsAllowedToBlockForConnectionMultiplier( int threadsAllowedToBlockForConnectionMultiplier) { MongoConfig.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier; } public static boolean isAuthentication() { return authentication; } public static void setAuthentication( boolean authentication) { MongoConfig.authentication = authentication; } } |
數據庫連接池管理類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/** *@Description: mongo數據庫連接池管理類 */ package cn.lulei.mongo.pool; import java.util.ArrayList; import java.util.List; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.Mongo; import com.mongodb.MongoOptions; import com.mongodb.ReadPreference; import com.mongodb.ServerAddress; public class MongoManager { private static Mongo mongo; private DB db; static { init(); } /** * @param dbName * @param userName * @param pwd * 實例化dbName一個DB */ public MongoManager(String dbName, String userName, String pwd) { if (dbName == null || "" .equals(dbName)) { throw new NumberFormatException( "dbName is null" ); } db = mongo.getDB(dbName); if (MongoConfig.isAuthentication() && !db.isAuthenticated()){ if (userName == null || "" .equals(userName)) { throw new NumberFormatException( "userName is null" ); } if (pwd == null || "" .equals(pwd)) { throw new NumberFormatException( "pwd is null" ); } db.authenticate(userName, pwd.toCharArray()); } } /** * 使用配置參數實例化 */ public MongoManager() { this (MongoConfig.getDbName(), MongoConfig.getUserName(), MongoConfig.getPwd()); } /** * @param tableName * @return * @Description: 獲取表tableName的鏈接DBCollection */ public DBCollection getDBCollection(String tableName) { return db.getCollection(tableName); } /** * @Description: mongo連接池初始化 */ private static void init() { if (MongoConfig.getHost() == null || MongoConfig.getHost().length == 0 ) { throw new NumberFormatException( "host is null" ); } if (MongoConfig.getPort() == null || MongoConfig.getPort().length == 0 ) { throw new NumberFormatException( "port is null" ); } if (MongoConfig.getHost().length != MongoConfig.getPort().length) { throw new NumberFormatException( "host's length is not equals port's length" ); } try { //服務列表 List<ServerAddress> replicaSetSeeds = new ArrayList<ServerAddress>(); for ( int i = 0 ; i < MongoConfig.getHost().length; i++) { replicaSetSeeds.add( new ServerAddress(MongoConfig.getHost()[i], MongoConfig.getPort()[i])); } //連接池參數設置 MongoOptions options = new MongoOptions(); options.connectionsPerHost = MongoConfig.getConnectionsPerHost(); options.threadsAllowedToBlockForConnectionMultiplier = MongoConfig.getThreadsAllowedToBlockForConnectionMultiplier(); mongo = new Mongo(replicaSetSeeds, options); //從服務器可讀 mongo.setReadPreference(ReadPreference.SECONDARY); } catch (Exception e){ e.printStackTrace(); } } } |
下面通過一個簡單的測試類,來看下如何使用這個連接池~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/** *@Description:mongo測試 */ package cn.lulei.mongo.test; import cn.lulei.mongo.pool.MongoConfig; import cn.lulei.mongo.pool.MongoManager; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub String[] host = { "127.0.0.1" }; int [] port = { 27001 }; MongoConfig.setHost(host); MongoConfig.setPort(port); MongoConfig.setDbName( "novel" ); MongoManager mongoManager = new MongoManager(); mongoManager.getDBCollection( "chapter" ); } } |
在使用上述管理類時,只需要初始化MongoConfig類即可。對類MongoManager的實例話,既可以使用MongoConfig的配置也可以自己通過參數來設置,每次獲取DBCollection 時,只需要調用getDBCollection(String tableName)方法即可。
以上就是本文的全部內容,希望本文所述對大家學習java程序設計有所幫助。