三、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!