三、java连接mongo数据库
系列导航
五、mongo备份篇 mongoexport、mongoimport 以及mongodump、mongorestore
java代码如何连接数据库,我这里给一个自认为比通用的连接方式。
一、pom文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> <dependency> <groupId>com.hynnet</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.1.0</version> </dependency>
二、连接代码
package mongo; import com.mongodb.*; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 描述: mongo的集群配置样例。 * <p>项目名称: mongo集群</p> * <p>文件名称: MongoDbDao.java</p> * <p>创建时间: 2020-10-09 </p> * <p>公司信息: 中国科学院新疆理化技术研究所</p> * <p>版权所有:Copyright (c) 2020</p> * * @author yc * @version 1.0.0.1 2020-10-09 yc * @since 1.8 */ @Configuration public class MongoDbDao implements ApplicationContextAware { static MongoClient mongoClient = null; @Autowired private Environment env; //springboot容器,用来获取容器内的实例 private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } /** * 描述:mongo的构造函数(配置信息)。 */ @Bean public MongoClient getMongoDbDao() { String passwd =""; String userName = env.getProperty("mongo.userName"); String database = env.getProperty("mongo.database"); passwd = env.getProperty("mongo.passwd"); List<ServerAddress> dataListPort = new ArrayList<>(); String datalist = env.getProperty("mongo.datalist"); String[] iplist = datalist.split(","); for (String ipPort: iplist) { String[] templist = ipPort.split(":"); String ip = templist[0]; int port = Integer.parseInt(templist[1]); ServerAddress serverAddress = new ServerAddress(ip,port); dataListPort.add(serverAddress); } if (mongoClient == null) { MongoClientOptions.Builder build = new MongoClientOptions.Builder(); //与目标数据库能够建立的最大connection数量为50 build.connectionsPerHost(40); //自动重连数据库启动 //build.autoConnectRetry(true); //如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待 build.threadsAllowedToBlockForConnectionMultiplier(5); /* * 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟 * 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception * 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败 */ build.maxWaitTime(1000 * 60 * 2); //与数据库建立连接的timeout设置为1分钟 build.connectTimeout(1000 * 60 * 1); MongoClientOptions myOptions = build.build(); if("".equals(passwd)||passwd == null){ //没密码连接 try { mongoClient = new MongoClient(dataListPort, myOptions); } catch (MongoException e) { e.printStackTrace(); } }else { //有密码 try { MongoCredential credential = MongoCredential.createCredential(userName, database, passwd.toCharArray()); mongoClient = new MongoClient(dataListPort, Arrays.asList(credential), myOptions); } catch (MongoException e) { e.printStackTrace(); } } } return mongoClient; } /** * 描述:mongo的构造函数(配置信息)。 * * @param dbName 数据库名 * @param collectionName 集合名称 * @return MongoDatabase 数据库连接 */ public static MongoCollection getCollection(String dbName, String collectionName) { return mongoClient.getDatabase(dbName).getCollection(collectionName, BasicDBObject.class); } /** * 描述:mongo的构造函数(配置信息)。 * * @param dbName 根据数据库名称获取连接 * @return MongoDatabase 数据库连接 */ public static MongoDatabase getDb(String dbName) { return mongoClient.getDatabase(dbName); } }
资源丰富的的网盘资源:网盘资源大全! 推荐一个适合零基础学习SQL的网站:不用安装数据库,在线轻松学习SQL!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!