Docker创建一个mongodb实例,并用springboot连接 mongodb进行读写文件

一、通过Docker 进行运行一个 mongodb实例

1、拉取镜像

docker pull mongo:5.0.5

2、创建 mongodb容器实例

docker run -d --name mongodb2 \-e MONGO_INITDB_ROOT_USERNAME=salaryMongo \-e MONGO_INITDB_ROOT_PASSWORD=123456 \-p 27017:27017 \mongo:5.0.5

3、进入容器,连接mongodb

#进入容器
docker exec -it mongodb2 bash#查看数据库
test> show databases;#切换admin数据库
test> use admin#查询当前数据库的所有集合(表)
admin> db.getCollectionNames()#查询当前库某个集合的记录
admin> db.admin.system.users.find()

4、客户端连接mongodb,这里以idea和navicat工具为例

下面是idea工具连接 mongodb示例图:

下面是 Navicat工具连接 mongodb示例图:

二、spring boot 连接 mongodb

1、这里用 spring boot 是2.2.2.RELEASE

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.52</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
</dependencies>

2、配置文件

mongodb:db: salaryReporthost: localhostport: 27017username: salaryMongopassword: 123456authDb: admin

3、配置类

@Data
@Component
@ConfigurationProperties(prefix = "mongodb")
public class MongoProperties {/*** 主机名*/private String host;/*** 端口*/private int port;/*** 集合*/private String db;/*** 用户名*/private String username;/*** 密码*/private String password;/*** 认证数据库*/private String authDb;
}
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;/*** 自定义Mingodb 配置*/
@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {private static final Logger LOGGER = LoggerFactory.getLogger(MongoConfig.class);/*** 配置文件*/@Autowiredprivate MongoProperties mongoProperties;/*** 自定义GridFsTemplate*/@Beanpublic GridFsTemplate gridFsTemplate() {return new GridFsTemplate(mongoTemplate().getMongoDbFactory(), mongoTemplate().getConverter(),this.getDatabaseName());}/*** 自定义模板*/@Beanpublic MongoTemplate mongoTemplate(){SimpleMongoClientDbFactory factory = new SimpleMongoClientDbFactory(mongoClient(),this.getDatabaseName());MongoTemplate mongoTemplate = new MongoTemplate(factory);return mongoTemplate;}/*** 自定义数据库名称*/@Override@Beanprotected String getDatabaseName() {return mongoProperties.getDb();}/*** 自定义客户端*/@Override@Beanpublic MongoClient mongoClient() {LOGGER.info("MongoDB Connection Details: Host: {}, Port: {}, Database: {}, Auth Database: {}, Username: {}",mongoProperties.getHost(), mongoProperties.getPort(), getDatabaseName(),mongoProperties.getAuthDb(), mongoProperties.getUsername());//mongodb://salaryMongo:123456@localhost:27017/salaryReport?authSource=admin&retryWrites=true&w=majority// Docker环境的MongoDB连接String uri = String.format("mongodb://%s:%s@%s:%d/%s?authSource=admin&retryWrites=true&w=majority",mongoProperties.getUsername(),mongoProperties.getPassword(),mongoProperties.getHost(),mongoProperties.getPort(),getDatabaseName());LOGGER.info("MongoDB Connection URI: {}", uri);return MongoClients.create(uri);}
}

4、存储和读取文件接口

import com.bilibili.config.MongoProperties;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.client.gridfs.model.GridFSFile;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;@RestController
@RequestMapping(value = {"/api/exportFile"})
public class ExportFileController {@Autowiredprivate GridFsTemplate gridFsTemplate;@Autowiredprivate MongoProperties mongoProperties;@ApiOperation(value = "上传Word文件")@PostMapping(value = {"/uploadFile"})public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) throws IOException {//文件输入流InputStream inputStream = file.getInputStream();//文件名String originalFilename = file.getOriginalFilename();// 上传文件中我们也可以使用DBObject附加一些属性DBObject metadata = new BasicDBObject();//把文件存储到mongodb里ObjectId objectId = gridFsTemplate.store(inputStream, originalFilename, mongoProperties.getDb(), metadata);String result = objectId.toString();// 处理文件流inputStream.close();System.out.println(result);return ResponseEntity.ok(result);}/*** 根据文件ID下载文件* @param response* @param param* @return* @throws IOException*/@PostMapping(value = {"/downloadFile"})public ResponseEntity<Void> downloadFile(HttpServletResponse response, @RequestBody Map<String,String> param) throws IOException {GridFsResource resource = null;try {String id = param.get("id");// 根据文件ID从GridFS中获取文件GridFSFile file = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id)));if (file == null) {throw new RuntimeException("文件不存在");}String contentType = file.getMetadata().getString("contentType");response.setContentType(contentType);// 从GridFS中获取文件流并写入响应输出流resource = gridFsTemplate.getResource(file);} catch (RuntimeException e) {throw new RuntimeException(e);}InputStream fis = resource.getInputStream();XWPFDocument document = new XWPFDocument(fis);// 将修改后的文档内容写回文件ServletOutputStream outputStream = response.getOutputStream();document.write(outputStream);// 关闭流outputStream.close();fis.close();document.close();return ResponseEntity.ok().build();}
}

GridFS

在 MongoDB中,使用 GridFS存储大于 16MB 的文件。

GridFS 集合

GridFS 将文件存储在两个集合中:

chunks 存储着二进制数据块。有关详细信息,请参阅 chunks 集合。

files 存储文件的元数据。有关详细信息,请参阅 files 集合。

GridFS 通过为每个集合添加一个存储桶名称前缀,从而将这些集合放置在一个通用存储桶中。默认情况下,GridFS 使用两个集合以及带名为 fs 的存储桶:fs.files、fs.chunks

用于自管理部署的GridFS - MongoDB 手册 v8.0

5、存储的内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491072.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12-2周 周总结

上周主要工作在英语六级&#xff0c;其它暂无进展 新的一周任务安排如下: ① 读完四篇重要文献论文 ② 搭建完云平台 ③ 整理小论文雏形 ④ 学习侧线系统代码 ⑤ 复习应用数理统计 前半部分 ⑥ springspringboot源码部分完结

云计算HCIP-OpenStack04

书接上回&#xff1a; 云计算HCIP-OpenStack03-CSDN博客 12.Nova计算管理 Nova作为OpenStack的核心服务&#xff0c;最重要的功能就是提供对于计算资源的管理。 计算资源的管理就包含了已封装的资源和未封装的资源。已封装的资源就包含了虚拟机、容器。未封装的资源就是物理机提…

【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 Scratch青蛙过河 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 Scr…

Elasticsearch 7.x入门学习-Spring Data Elasticsearch框架

1 Spring Data框架 Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持 map-reduce 框架和云计算数据服务。 Spring Data 可以极大的简化 JPA的写法&#xff0c;…

OpenCV实验篇:识别图片颜色并绘制轮廓

第三篇&#xff1a;识别图片颜色并绘制轮廓 1. 实验原理 颜色识别的原理&#xff1a; 颜色在图像处理中通常使用 HSV 空间来表示。 HSV 空间是基于人类视觉系统的一种颜色模型&#xff0c;其中&#xff1a; H&#xff08;Hue&#xff09;&#xff1a;色调&#xff0c;表示颜色…

MySql5.7安装、配置最新版

网上有很多的安装教程&#xff0c;但是有很多同学找不到历史安装包&#xff0c;而且官网变动比较大&#xff0c;我就直接给安装包了&#xff0c;下载 这个是安装包msi下载&#xff0c;可以参考下面的 MySQL详细安装教程&#xff0c;关于msi版和zip版详解&#xff0c;Windows …

ISP算法之坏点校正DPC(二):Verilog硬件实现与仿真

DPC的算法讲解和MATLAB仿真参考上一节&#xff1a; ISP算法之坏点校正DPC(一)&#xff1a;MATLAB仿真验证-CSDN博客 本节讲解Verilog的硬件实现与仿真 行缓存设计 DPC算法是基于窗口邻域的像素级别算法&#xff0c;因此需要对实时到来的视频流进行行缓存&#xff0c;行缓存…

UE5制作倒计时功能

设置画布和文本 文本绑定 格式化时间 转到事件图表&#xff0c;计算时间&#xff0c;时间结束后面的事件可以按自己需求写 进入关卡蓝图&#xff0c;添加倒计时UI

在Spring Boot中的实现国际化(i18n)

1.什么是国际化&#xff08;i18n&#xff09;&#xff1f; 国际化&#xff08;Internationalization&#xff0c;简称i18n&#xff09;是指在软件应用中支持多种语言和文化的能力。通过国际化&#xff0c;应用可以根据用户的语言和地区设置&#xff0c;动态地显示不同的文本内…

大模型的构建与部署(3)——数据标注

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 数据标注的重要性 1.1 增强数据可解释性 数据标注通过为原始数据添加标签或注释,显著增强了数据的可解释性。在机器学习和深度学习领域,模型的训练依赖于大量带标签的数据。这些标签不仅帮助…

【考前预习】4.计算机网络—网络层

往期推荐 【考前预习】3.计算机网络—数据链路层-CSDN博客 【考前预习】2.计算机网络—物理层-CSDN博客 【考前预习】1.计算机网络概述-CSDN博客 目录 1.网络层概述 2.网络层提供的两种服务 3.分类编址的IPV4 4.无分类编址的IPV4—CIDR 5.IPV4地址应用规划 5.1使用定长子…

需求管理(尊享版)

需求管理 由于需求是正在构建的系统必须符合的事务&#xff0c;而且符合某些需求决定了项目的成功或失败&#xff0c;因此找出需求是什么&#xff0c;将它们记下来&#xff0c;进行组织&#xff0c;并在发生变化时对它们进行追踪&#xff0c;这些活动都是有意义的。 需求管理…

前后端跨域问题(CROS)

前端 在src中创建util文件&#xff0c;写request.js文件&#xff1a; request.js代码如下&#xff1a; import axios from axios import { ElMessage } from element-plus;const request axios.create({// baseURL: /api, // 注意&#xff01;&#xff01; 这里是全局统一加…

【python从入门到精通】-- 第六战:列表和元组

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;重生之我在学Linux&#xff0c;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持…

操作系统课后习题2.2节

操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度&#xff0c;这个是由CPU的设计和它的硬件来决定的&#xff0c;具体的调度算法是不能提高CPU的效率的&#xff1b; 第3题 互斥性&#xff1a; 指的是进程之间的同步互斥关系&#xff0c;进程是一个动态的过程&#…

openlane

openlane数据集&#xff0c;lane3d_1000里训练集157807张图片&#xff0c;测试集39981张图&#xff0c;md太多了

在pycharm2024.3.1中配置anaconda3-2024-06环境

version: anaconda3-2024.06-1 pycharm-community-2024.3.1 1、安装anaconda和pycharm 最新版最详细Anaconda新手安装配置环境创建教程_anaconda配置-CSDN博客 【2024最新版】超详细Pycharm安装保姆级教程&#xff0c;Pycharm环境配置和使用指南&#xff0c;看完这一篇就够了…

深度解读:Top14金融顶刊

作者Toby&#xff1a;来源&#xff1a;Python风控模型&#xff0c;Top14金融顶刊 各位同学好&#xff0c;我是Toby老师&#xff0c;今天为大家介绍金融风控领域的顶级学术期刊&#xff0c;用于小论文发布平台参考。 金融风控领域内有许多顶级学术期刊&#xff0c;它们发表高质…

系列2:基于Centos-8.6Kubernetes 集成GPU资源信息

每日禅语 自省&#xff0c;就是自我反省、自我检查&#xff0c;自知己短&#xff0c;从而弥补短处、纠正过失。佛陀强调自觉觉他&#xff0c;强调以达到觉行圆满为修行的最高境界。要改正错误&#xff0c;除了虚心接受他人意见之外&#xff0c;还要不忘时时观照己身。自省自悟之…

EnumMap:让Java Map更高效的技巧

前言 摘要 内容 什么是EnumMap 如何使用EnumMap EnumMap的实现原理 EnumMap的例子 测试用例 小结 前言 在Java中&#xff0c;枚举类型是一种非常有用的数据类型&#xff0c;它可以用于定义一组固定的常量。枚举类型在很多场景中都有广泛的应用&#xff0c;例如状态码、…