五、springboot 整合 mongodb
阿新 • • 發佈:2018-12-31
一、在 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();
}
}