java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫連接池
MongoDB是介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的一種產(chǎn)品,文件的存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展),這里就主要介紹Java通過使用mongo-2.7.3.jar包實(shí)現(xiàn)mongodb連接池,具體的java代碼實(shí)現(xiàn)如下:
數(shù)據(jù)庫連接池配置參數(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ù)庫名 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ù)庫連接池管理類:
/** *@Description: mongo數(shù)據(jù)庫連接池管理類 */ 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(); } } }
下面通過一個(gè)簡(jiǎn)單的測(cè)試類,來看下如何使用這個(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的配置也可以自己通過參數(shù)來設(shè)置,每次獲取DBCollection 時(shí),只需要調(diào)用getDBCollection(String tableName)方法即可。
以上就是本文的全部?jī)?nèi)容,希望本文所述對(duì)大家學(xué)習(xí)java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Spring攔截器實(shí)現(xiàn)鑒權(quán)的示例代碼
本文主要介紹了Spring攔截器實(shí)現(xiàn)鑒權(quán)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07ArrayList與linkedList的用法區(qū)別及擴(kuò)容方式
這篇文章主要介紹了ArrayList與linkedList的用法區(qū)別及擴(kuò)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03java+sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要介紹了利用java和sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),違章內(nèi)容主要建立了與sqlserver數(shù)據(jù)庫的連接開始展開內(nèi)容,能學(xué)到了解JDBC執(zhí)行SQL的語法,需要的朋友可以參考一下2021-12-12maven下mybatis-plus和pagehelp沖突問題的解決方法
這篇文章主要介紹了maven下mybatis-plus和pagehelp沖突的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Springcloud中的region和zone的使用實(shí)例
這篇文章主要介紹了Springcloud中的region和zone的使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10