因为项目使用了MongoDB作为数据源,最近因为访问量的激增数据库老是崩,虽然我们使用的云数据库,有客服帮我们解决问题,但是毕竟是我们的项目的问题,根本原因还是要从我们项目入手解决问题。
jar包:mongo-java-driver-3.4.0.jar
jongo-1.3.0.jar
之前我们项目的链接方式:
MongoCredential credential = MongoCredential.createCredential(userName, database, pwd.toCharArray());
ServerAddress serverAddress = new ServerAddress(host, port);
MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(credential));
DB mondb = mongoClient.getDB(database);
jongo = new Jongo(mondb);
之前没注意过这块,出问题了就研究下。项目中是使用Jongo操作MongoClient去操作的数据库。刚开始一直不知道数据库链接池在哪配置,一直以为没有链接池,最后从网上查资料说MongoClient其实就是一个链接池。它可以配置一些链接池信息,不用再引入三方链接池。然后就改改呗。
最后改成了这样
ServerAddress serverAddress = new ServerAddress(host, port);
MongoCredential credential = MongoCredential.createCredential(userName, database, pwd.toCharArray());
MongoClientOptions.Builder build = new MongoClientOptions.Builder();
build.minConnectionsPerHost(10);
build.connectionsPerHost(300); //与目标数据库能够建立的最大connection数量为50
build.threadsAllowedToBlockForConnectionMultiplier(500); //如果
build.maxWaitTime(1000*60*2);
build.connectTimeout(1000*60*1); //与数据库建立连接的timeout设置为1分钟
MongoClientOptions myOptions = build.build();
//数据库连接实例
MongoClient mongoClient = new MongoClient(serverAddress,Arrays.asList(credential), myOptions);
DB mondb = mongoClient.getDB(database);
jongo = new Jongo(mondb);
就完成了一个链接池配置。
上线,over。