三、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);
}
}
三、java连接mongo数据库的更多相关文章
- MySQL学习(三)——Java连接MySQL数据库
1.什么是JDBC? JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据 ...
- Java连接Oracle数据库的三种连接方式
背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
- Java连接MySQL数据库及简单操作代码
1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- Java进阶(二十五)Java连接mysql数据库(底层实现)
Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...
- java连接MySql数据库 zeroDateTimeBehavior
JAVA连接MySQL数据库,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常, 就是所见的:java.sql.SQLException: Cannot convert va ...
- Java连接SqlServer2008数据库(转)
Java连接SqlServer2008数据库 首先下载JDBC:下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 下 ...
- 转载:Java连接MySQL 数据库的正确操作流程
转载网址:http://www.bitscn.com/pdb/mysql/201005/186551.html 以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例 ...
- Java 连接 MySQL 数据库
最近想学习一下 Java 连接 MySQL 数据库,于是有了这样的一些问题&解决办法. 首先是解决 JDBC(Java Data Base Connectivity)驱动问题,因为默认安装的J ...
随机推荐
- 使用 PyTorch 完全分片数据并行技术加速大模型训练
本文,我们将了解如何基于 PyTorch 最新的 完全分片数据并行 (Fully Sharded Data Parallel,FSDP) 功能用 Accelerate 库来训练大模型. 动机 随着机器 ...
- Java并发(十七)----变量的线程安全分析
1.成员变量和静态变量是否线程安全 如果它们没有共享,则线程安全 如果它们被共享了,根据它们的状态是否能够改变,又分两种情况 如果只有读操作,则线程安全 如果有读写操作,则这段代码是临界区,需要考虑线 ...
- [CF1849F] XOR Partition
XOR Partition 题目描述 For a set of integers $ S $ , let's define its cost as the minimum value of $ x \ ...
- [ABC274D] Robot Arms 2
Problem Statement You are given a sequence $A = (A_1, A_2, \dots, A_N)$ of length $N$ consisting of ...
- 自定义线程池将异常"吃了"
今天在做项目时,写了一个使用自定义线程池执行远程调用 // 删除购物车信息 corePoolExecutor.submit(() -> { try { cartFeignClient.delet ...
- Python——第二章:字符的编码encode和解码decode
相关阅读:字符集(Character Set)和编码(Encoding)的历史演化 字符集和编码的总结: 1. ASCII编码: 8bit, 1byte => 256(最大可表示)2. GBK编 ...
- 大地经纬度坐标系与Web墨卡托坐标系的转换
目录 1. 概述 2. 实现 3. 参考 1. 概述 我在<大地经纬度坐标与地心地固坐标的的转换>这篇文章中已经论述了大地坐标系/地理坐标系的概念,简单来说就是由经度.纬度以及高程(BLH ...
- Cesium案例解析(十)——CZML点
目录 1. 概述 2. 案例 3. 结果 1. 概述 CZML是Cesium中用于描述动态图形场景的JSON格式,它们的关系类似于Google Earth与KML之间的关系,一般会认为KML是一种矢量 ...
- 华为云云容器引擎CCE产品文档带来4个升级,降低使用难度
本文分享自华为云社区<华为云云容器引擎CCE产品文档优化升级!>,作者: 云容器大未来 . 云原生产品技术栈庞大,需要用户对容器.Kubernetes等核心技术都有扎实的理解和掌握:同时问 ...
- 云小课|MRS基础操作之集群健康检查
本文分享自华为云社区<云小课|MRS基础操作之集群健康检查>,作者:阅识风云. 阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视 ...