SpringBoot结合mongodb进行业务开发,也属于比较基本的需求了,本文为mongo系列的基本篇,主要就是环境搭建、工程的配置设置相关
I. 环境搭建
正式开始之前,第一步就是需要安装Mongo的环境了,因为环境的安装和我们spring的主题没有太大的关系,因此我们选择最简单的使用姿势:直接用docker来安装mongo来使用
下面的安装过程都是mac环境,其他操作系统可以直接安装mongodb,移步相关教程
1. docker 安装
可以直接到官网进行下载安装,但是对系统版本有要求,所以需要使用Docker ToolBox
,实际试过之后,感觉不太好用,实际上是将docker安装到虚拟机中了,下面直接使用brew
命令进行安装
安装命令
1
| brew cask install docker
|
执行完毕之后,会多一个应用名为 docker
, 双击运行,输入密码等即可
2. mongo 安装使用
直接使用官方的mongo镜像即可,然后绑定端口映射,就可以在宿主机中使用mongo
1 2 3 4 5 6 7 8 9 10 11
| docker pull mongo
docker run --name mongo -p 27017:27017 -d mongo --auth
docker exec -it d9132f1e8b26 /bin/bash
mongo use admin db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) exit
|
上面完毕之后,可以在宿主机进行连接测试,判断是否安装成功
II. SpringBoot工程配置
1. pom依赖
整个框架选择的是spring-boot,所有spring这一套相关的pom配置少不了,我们主要需要注意的包就是spring-boot-starter-data-mongodb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> </parent>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> <java.version>1.8</java.version> </properties>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.45</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
<build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </pluginManagement> </build>
<repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
|
2. 配置文件
配置文件如下,主要就是连接mongo的url
1
| spring.data.mongodb.uri=mongodb://root:root@localhost:27017/basic?authSource=admin&authMechanism=SCRAM-SHA-1
|
通过上面的实例,也知道格式如下:
mongodb://用户名:密码@host:port/dbNmae?参数
- 当没有用户名和密码时,可以省略掉中间的
root:root@
;
- 当需要认证时,请格外注意
- mongodb新版的验证方式改成了
SCRAM-SHA-1
,所以参数中一定一定一定得加上
?authSource=admin&authMechanism=SCRAM-SHA-1
- 如果将mongodb的验证方式改成了
MONGODB-CR
, 则上面的可以不需要
3. 测试使用
写一个简单的测试类,看下mongodb是否连接成功,是否可以正常操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| @Slf4j @Component public class MongoTemplateHelper {
@Getter @Setter private MongoTemplate mongoTemplate;
public MongoTemplateHelper(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; }
public void saveRecord(Map<String, Object> params, String collectionName) { mongoTemplate.save(params, collectionName); }
public void queryRecord(Map<String, Object> query, String collectionName) { Criteria criteria = null; for (Map.Entry<String, Object> entry : query.entrySet()) { if (criteria == null) { criteria = Criteria.where(entry.getKey()).is(entry.getValue()); } else { criteria.and(entry.getKey()).is(entry.getValue()); } }
Query q = new Query(criteria); Map result = mongoTemplate.findOne(q, Map.class, collectionName); log.info("{}", result); } }
|
上面提供了两个方法,新增和查询,简单的使用姿势如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @SpringBootApplication public class Application {
private static final String COLLECTION_NAME = "personal_info";
public Application(MongoTemplateHelper mongoTemplateHelper) { Map<String, Object> records = new HashMap<>(4); records.put("name", "小灰灰Blog"); records.put("github", "https://github.com/liuyueyi"); records.put("time", LocalDateTime.now());
mongoTemplateHelper.saveRecord(records, COLLECTION_NAME);
Map<String, Object> query = new HashMap<>(4); query.put("name", "小灰灰Blog"); mongoTemplateHelper.queryRecord(query, COLLECTION_NAME); }
public static void main(String[] args) { SpringApplication.run(Application.class); }
}
|
然后开始执行,查看输出,结果演示如下
gif.gif
4. 说明
最后针对认证的问题,需要额外提一句,开始测试的时候,使用的配置如下
1 2 3 4 5
| spring.data.mongodb.username=root spring.data.mongodb.password=root spring.data.mongodb.authentication-database=basic spring.data.mongodb.host=localhost spring.data.mongodb.port=27017
|
然而因为mongo采用的是SHA-1加密方式,所以始终验证不通过;然后查了一下,各种让改mongo的验证版本,改回去用CR的方式;但明显这种并不是一种好的解决方式,既然新的版本选择了新的加密方式,总有他的理由,所以应该改的还是spring的使用姿势;目前还没找到匹配上面这种配置方式的解决方案;
本文选择的是用url的方式指定加密方式来解决这个问题,当然研究下后面这种方式内部实现,应该就能知道前面的可以怎么解决,这点记下来,后续再开坑填
III. 其他
0. 项目
1. 一灰灰Blog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
3. 扫描关注
一灰灰blog
QrCode
知识星球
goals
Be the first person to leave a comment!