1. 程式人生 > >五、springboot 整合 mongodb

五、springboot 整合 mongodb

一、在 Linux 上開啟 mongodb 複製集的先期準備

1、開啟 複製集 所有節點的埠,供遠端訪問

/sbin/iptables -I INPUT -p tcp --dport 28001 -j ACCEPT&&/etc/init.d/iptables save&&service iptables restart&&/etc/init.d/iptables status
/sbin/iptables -I INPUT -p tcp --dport 28002 -j ACCEPT&&/etc/init.d/iptables save&&
service iptables restart&&/etc/init.d/iptables status /sbin/iptables -I INPUT -p tcp --dport 28003 -j ACCEPT&&/etc/init.d/iptables save&&service iptables restart&&/etc/init.d/iptables status

2、建立擁有讀寫許可權的使用者

3、啟動例項

二、整合

(一)新增依賴

		<dependency>
			<groupId>org.springframework.boot</
groupId
>
<artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>

(二)配置 mongodb
application.properties

spring.application.name=spring-boot-mongodb
server.port=8080
management.endpoints.web.exposure.include=*

#mongodb配置項mongodb://[username:[email protected]
]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] spring.data.mongodb.uri=mongodb://root:root@192.168.10.130:28001,192.168.10.130:28002,192.168.10.130:28003/admin

注意 uri 的書寫格式:
mongodb://[username:[email protected]]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

(三)編寫測試類

1、entity

import lombok.Data;

import java.io.Serializable;
import java.math.BigInteger;

/**
 * @author 鹹魚
 * @date 2018/12/13 16:18
 */
@Data
public class User implements Serializable {
    private BigInteger id;
    private String name;
    private Integer age;
}

注意:
  若 POJO 物件的 id 欄位為Long 型別,那 Mongodb 會自動將 id 欄位轉換為集合中的 _id 欄位(_id:Mongodb資料庫中資料條目的標識,若不指定,自動生成)。這樣會帶來一個問題,我們再從 Mongodb 中取 POJO 物件時,id 欄位會轉型失敗,會報with root cause org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type org.bson.types.ObjectId to type java.lang.Long異常。
  為了避免這種情況出現,可以將 POJO 物件的 id 欄位型別設定為 BigInteger 或 String。

2、Repository

import lombok.RequiredArgsConstructor;
import org.pc.mongodb.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author 鹹魚
 * @date 2018/12/13 16:09
 */
@Repository
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MongodbRepository {
    private final MongoTemplate mongoTemplate;

    public boolean saveUser(User user){
        mongoTemplate.insert(user, "imooc");
        return true;
    }
    public List<User> findAllUsers(){
        return mongoTemplate.findAll(User.class, "imooc");
    }
}

3、Controller

import lombok.RequiredArgsConstructor;
import org.pc.mongodb.entity.User;
import org.pc.mongodb.repository.MongodbRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author 鹹魚
 * @date 2018/12/13 16:08
 */
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MongodbController {
    private final MongodbRepository mongodbRepository;

    @PostMapping("/user")
    public boolean saveUser(@RequestBody User user){
        return mongodbRepository.saveUser(user);
    }

    @GetMapping("/user/all")
    public List<User> getAllUsers(){
        return mongodbRepository.findAllUsers();
    }
}