更多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
知識星球