一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java實現mongodb的數據庫連接池

java實現mongodb的數據庫連接池

2020-03-19 13:04xiaojimanman JAVA教程

這篇文章主要介紹了基于java實現mongodb的數據庫連接池,Java通過使用mongo-2.7.3.jar包實現mongodb連接池,感興趣的小伙伴們可以參考一下

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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青青手机在线视频 | 996热精品视频在线观看 | 美女认你摸 | 欧美又黄又激烈真实床戏 | 高h短篇合集 | 含羞草传媒网站免费进入欢迎 | 嫩模被黑人粗大挺进 | 日本一区二区三区在线 观看网站 | 美女扒开胸罩露出奶了无遮挡免费 | 2020国语对白露脸 | 四虎最新永久在线精品免费 | 亚洲成人一区在线 | 1024香蕉视频 | 欧美精品1区2区 | 日韩精品福利视频一区二区三区 | 久久精麻豆亚洲AV国产品 | 亚洲欧美精品一区二区 | 精品麻豆 | 99热在线精品播放 | 四虎影视在线看免费 720p | 91精品国产综合久久精品 | 欧美va在线 | 成人国产在线观看 | 国产成人精品视频午夜 | 99视频精品免费99在线 | 2020国产精品视频免费 | 高清国语自产拍免费视频国产 | 国产精品欧美日韩一区二区 | 西西人体大胆77777视频 | 国产一级在线观看视频 | 国产成人小视频在线观看 | 国产码一区二区三区 | freesex1718处xx| 精东影业传媒全部作品 | 亚洲国产第一区二区香蕉日日 | 国产精品日本一区二区不卡视频 | 操b图片| 亚洲色图色 | 欧美式禁忌 | 日本人作爰啪啪全过程 | 99国产牛牛视频在线网站 |