三、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 ...
随机推荐
- MNIST中文手写数字数据识别
MNIST中文手写数字数据识别 实验环境 python=3.7 torch==1.13.1+cu117 torchaudio==0.13.1+cu117 torchvision==0.14.1 数据描 ...
- 路径规划算法 - 求解最短路径 - A*(A-Star)算法
Dijkstra(迪杰斯特拉)算法 A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法.算法中的距离估算值与实际值越接近,最终搜索速度越快. A* ...
- Oracle参数文件spfile
spfile:server parameter file. spfile只能通过OEM(oracle enterprise manager)软件或者alter system命令进行修改. spfile ...
- 数字孪生与GIS的结合:创新灾害预防管理的未来
近年来,全球频发的自然灾害给人们的生命和财产安全带来了巨大威胁,灾害预防管理成为当务之急.然而,随着数字孪生技术和GIS的迅猛发展,一种全新的解决方案正在崭露头角.数字孪生与GIS的结合,为灾害预防管 ...
- 前端异步编程 —— Promise对象
在前端编程中,处理一些简短.快速的操作,在主线程中就可以完成. 但是,在处理一些耗时比较长以至于比较明显的事情,比如读取一个大文件或者发出一个网络请求,就需要异步编程来实现,以避免只用主线程时造成页面 ...
- Linux-LVM 磁盘扩容
LVM技术详解:视频1.视频2.视频3 安装lvm2后才支持如下命令 yum install -y lvm2 序号 功能 PV物理卷命令 VG卷组命令 LV逻辑卷命令 01 扫描功能 pvscan v ...
- 云MSP技本功|基于OGG 实现Oracle到Kafka增量数据实时同步
简介: 在大数据时代,存在大量基于数据的业务.数据需要在不同的系统之间流动.整合.通常,核心业务系统的数据存在OLTP数据库系统中,其它业务系统需要获取OLTP系统中的数据.传统的数仓通过批量数据同步 ...
- ctfshow-misc详解(持续更新中)
杂项签到 题目是个损坏的压缩包,考点:伪加密 修改如下: 保存解压得到flag flag{79ddfa61bda03defa7bfd8d702a656e4} misc2 题目描述: 偶然发现我竟然还有 ...
- 用Python写一个简单的TCP客户端和服务端
在渗透测试过程中,经常需要创建一个TCP客户端,用来测试服务.发送数据.进行 fuzz 等等.如果黑客潜伏在某大型企业的内网环境中,则不太可能直接获取网络工具或编译器,有时甚至连复制/粘贴或者连接外网 ...
- P5179 Fraction 题解
题目描述 给你四个正整数 \(a,\,b,\,c,\,d\) ,求一个最简分数 \(\frac{p}{q}\) 满足 \(\frac{a}{b} < \frac{p}{q} < \frac ...