三、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 ...
随机推荐
- WPF 绑定binding都有哪些事件
在WPF中,源属性(Source Property)指的是提供数据的属性,通常是数据模型或者其他控件的属性,而目标属性(Target Property)则是数据绑定的目标,通常是绑定到控件的属性,例如 ...
- c标签的使用问题
这是在使用c标签的时候遇到的问题,发现在导入包成功的情况下,jsp页面代码也没有问题.在网页上查了查,发现需要修改tomcat中的 conf/catalina.properties文件. 将tomca ...
- Linux磁盘专题-linux文件系统详解
这可是我几年前的杰作笔记呀.....当初手写计算都会,现在忘光光.... 物理硬盘Block的概念和作用 硬盘底层一次IO就是读.写一次扇区,一个扇区默认是512Byte. 读写大量文件如果以扇区为单 ...
- bash shell笔记整理——file命令
file命令的作用 查看一个给定参数的文件类型 file命令语法 file [FILE...] file命令还有选项,但是基本用的不太多,这个命令也基本用得不是很多. 示例 [root@nginx-p ...
- 操作系统大作业:在Linux环境下模拟实现简单命令解释器(代码部分)
好家伙 1. 题目要求 一. 课程设计(大作业)目的 熟悉Linux编程环境,加强对Linux命令的理解及函数的运用,完成一个操作系统的部分系统的设计过程.编码.调试,锻炼实际应用能力. 二. ...
- Windows系统修复(System Update Readiness Tool、SFC模式、DISM命令)可解决系统更新问题。
安装System Update Readiness Tool 提供此更新是因为在 Windows servicing store 中发现了不一致,这可能会影响将来成功安装更新.service pack ...
- Next.js 开发指南 初始篇 | Next.js CLI
基础篇.实战篇.源码篇.面试篇四大篇章带你系统掌握 Next.js! 前言 欢迎学习 Next.js!在学习具体的知识点之前,我们先来创建一个 Next.js 项目.创建了可运行的项目,才能在学习 ...
- AI与低代码解锁无限可能
前言 近年来,人工智能(AI)和低代码开发技术逐渐成为数字化转型的重要推动力.AI作为一项具有革命性潜力的技术,正在改变我们生活的方方面面.而低代码开发则提供了一种快速构建应用程序的方法,使得开发者无 ...
- 简易机器学习笔记(十一)opencv 简易使用-人脸识别、分类任务
前言 前段时间摸了下机器学习,然后我发现其实openCV还是一个很浩瀚的库的,现在也正在写一篇有关yolo的博客,不过感觉理论偏多,所以在学yolo之前先摸一下opencv,简单先写个项目感受感受op ...
- just_audio音频播放器
代码 import 'package:flutter/material.dart'; import 'package:just_audio/just_audio.dart'; void main() ...