java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫(kù)連接池
MongoDB是介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的一種產(chǎn)品,文件的存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展),這里就主要介紹Java通過(guò)使用mongo-2.7.3.jar包實(shí)現(xiàn)mongodb連接池,具體的java代碼實(shí)現(xiàn)如下:
數(shù)據(jù)庫(kù)連接池配置參數(shù):
/**
*@Description: mongo連接池配置文件
*/
package cn.lulei.mongo.pool;
public class MongoConfig {
private static String userName;//用戶名
private static String pwd;//密碼
private static String[] host;//主機(jī)地址
private static int[] port;//端口地址
private static String dbName;//數(shù)據(jù)庫(kù)名
private static int connectionsPerHost = 20;//每臺(tái)主機(jī)最大連接數(shù)
private static int threadsAllowedToBlockForConnectionMultiplier = 10;//線程隊(duì)列數(shù)
private static boolean authentication = false;//是否需要身份驗(yàn)證
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;
}
}
數(shù)據(jù)庫(kù)連接池管理類:
/**
*@Description: mongo數(shù)據(jù)庫(kù)連接池管理類
*/
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
* 實(shí)例化dbName一個(gè)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());
}
}
/**
* 使用配置參數(shù)實(shí)例化
*/
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 {
//服務(wù)列表
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]));
}
//連接池參數(shù)設(shè)置
MongoOptions options = new MongoOptions();
options.connectionsPerHost = MongoConfig.getConnectionsPerHost();
options.threadsAllowedToBlockForConnectionMultiplier = MongoConfig.getThreadsAllowedToBlockForConnectionMultiplier();
mongo = new Mongo(replicaSetSeeds, options);
//從服務(wù)器可讀
mongo.setReadPreference(ReadPreference.SECONDARY);
} catch (Exception e){
e.printStackTrace();
}
}
}
下面通過(guò)一個(gè)簡(jiǎn)單的測(cè)試類,來(lái)看下如何使用這個(gè)連接池~
/**
*@Description:mongo測(cè)試
*/
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");
}
}
在使用上述管理類時(shí),只需要初始化MongoConfig類即可。對(duì)類MongoManager的實(shí)例話,既可以使用MongoConfig的配置也可以自己通過(guò)參數(shù)來(lái)設(shè)置,每次獲取DBCollection 時(shí),只需要調(diào)用getDBCollection(String tableName)方法即可。
以上就是本文的全部?jī)?nèi)容,希望本文所述對(duì)大家學(xué)習(xí)java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Java 關(guān)于String字符串原理上的問(wèn)題
字符串廣泛應(yīng)用 在 Java 編程中,在 Java 中字符串屬于對(duì)象,Java 提供了 String 類來(lái)創(chuàng)建和操作字符串,讓我們一起來(lái)了解它2022-04-04
Spring攔截器實(shí)現(xiàn)鑒權(quán)的示例代碼
本文主要介紹了Spring攔截器實(shí)現(xiàn)鑒權(quán)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
ArrayList與linkedList的用法區(qū)別及擴(kuò)容方式
這篇文章主要介紹了ArrayList與linkedList的用法區(qū)別及擴(kuò)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
java+sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要介紹了利用java和sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),違章內(nèi)容主要建立了與sqlserver數(shù)據(jù)庫(kù)的連接開(kāi)始展開(kāi)內(nèi)容,能學(xué)到了解JDBC執(zhí)行SQL的語(yǔ)法,需要的朋友可以參考一下2021-12-12
maven下mybatis-plus和pagehelp沖突問(wèn)題的解決方法
這篇文章主要介紹了maven下mybatis-plus和pagehelp沖突的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Springcloud中的region和zone的使用實(shí)例
這篇文章主要介紹了Springcloud中的region和zone的使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10

