更多Spring文章,欢迎点击 一灰灰Blog-Spring专题java
SpringBoot结合mongodb进行业务开发,也属于比较基本的需求了,本文为mongo系列的基本篇,主要就是环境搭建、工程的配置设置相关git
正式开始以前,第一步就是须要安装Mongo的环境了,由于环境的安装和咱们spring的主题没有太大的关系,所以咱们选择最简单的使用姿式:直接用docker来安装mongo来使用github
下面的安装过程都是mac环境,其余操做系统能够直接安装mongodb,移步相关教程spring
能够直接到官网进行下载安装,可是对系统版本有要求,因此须要使用Docker ToolBox
,实际试过以后,感受不太好用,其实是将docker安装到虚拟机中了,下面直接使用brew
命令进行安装mongodb
安装命令docker
brew cask install docker
复制代码
执行完毕以后,会多一个应用名为 docker
, 双击运行,输入密码等便可json
直接使用官方的mongo镜像便可,而后绑定端口映射,就能够在宿主机中使用mongobash
# 下载镜像
docker pull mongo
# 加载并运行镜像
docker run --name mongo -p 27017:27017 -d mongo --auth
# 进入容器
docker exec -it d9132f1e8b26 /bin/bash
# 为mongo建立登陆用户和密码
mongo
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
exit
复制代码
上面完毕以后,能够在宿主机进行链接测试,判断是否安装成功框架
整个框架选择的是spring-boot,全部spring这一套相关的pom配置少不了,咱们主要须要注意的包就是spring-boot-starter-data-mongodb
maven
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</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>
复制代码
配置文件以下,主要就是链接mongo的url
spring.data.mongodb.uri=mongodb://root:root@localhost:27017/basic?authSource=admin&authMechanism=SCRAM-SHA-1
复制代码
经过上面的实例,也知道格式以下:
mongodb://用户名:密码@host:port/dbNmae?参数
root:root@
;SCRAM-SHA-1
,因此参数中必定必定必定得加上
?authSource=admin&authMechanism=SCRAM-SHA-1
MONGODB-CR
, 则上面的能够不须要写一个简单的测试类,看下mongodb是否链接成功,是否能够正常操做
@Slf4j
@Component
public class MongoTemplateHelper {
@Getter
@Setter
private MongoTemplate mongoTemplate;
public MongoTemplateHelper(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
/** * 保存记录 * * @param params * @param collectionName */
public void saveRecord(Map<String, Object> params, String collectionName) {
mongoTemplate.save(params, collectionName);
}
/** * 精确查询方式 * * @param query * @param 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);
}
}
复制代码
上面提供了两个方法,新增和查询,简单的使用姿式如
@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);
}
}
复制代码
而后开始执行,查看输出,结果演示以下
最后针对认证的问题,须要额外提一句,开始测试的时候,使用的配置以下
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的方式指定加密方式来解决这个问题,固然研究下后面这种方式内部实现,应该就能知道前面的能够怎么解决,这点记下来,后续再开坑填
一灰灰的我的博客,记录全部学习和工做中的博文,欢迎你们前去逛逛
尽信书则不如,以上内容,纯属一家之言,因我的能力有限,不免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
一灰灰blog
知识星球