springboot+Mongodb
如果springdata连接mongodb报如下错误
com.mongodb.MongoCommandException: Command failed with error 18 (Authenticat
那就是数据库账号权限的问题,跟代码没有什么关系。
win10本地安装的mongodb,使用springdata连接
另外,不论是docker安装,还是win10本地安装包安装,都要对配置文件进行修改。
win10在安装路径下\mongodb\bin的mongod.cfg文件中
bindIp这里需要修改,结果如下
net:
port: 27017
bindIp: 0.0.0.0
开始整合,maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
这里注意,安装好mongodb后,尽管通过Navicat可以连接,但是使用代码存在bug,这里需要先创建用户和密码。
第一步:use test
第二步:
db.createUser(
{
user:"root",
pwd:"123456",
roles:[{role:"root",db:"admin"}]
}
)
spring:
data:
mongodb:
url: mongodb://root:123456@localhost:27017/test
我惊奇的发现好多相关文章,这里好多同学们这里居然是uri,我都不知道你们是怎么连上mongodb和居然不报错能跑起来的。
下一步,一个实体类,Document绑定表名
import lombok.Data;
import lombok.ToString;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
@Data
@ToString
@Document(collection = "User")
public class MongoDBEntity implements Serializable {
private Integer id;
private String Name;
}
来个添加,引入一下实体类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/mongo")
public class MongoDBController {
@Autowired
private MongoTemplate mongoTemplate;
@RequestMapping(value = "/addAll")
public R addAll() {
MongoDBEntity entity = new MongoDBEntity();
entity.setId(1);
entity.setName("name");
mongoTemplate.save(entity);
return R.ok().putData("list", entity);
}
}
然后用mongoTemplate的各种api就可以进行各种操作了。
com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed)
出现此错误时,是maven版本和docker中mongodb版本不兼容的原因。
如果是使用docker部署,会出现无法连接docker中的mongodb数据的问题,
找到这个,点进去,
第53行,显示版本为4.0.5
https://hub.docker.com/
在这里找这个版本的镜像,mongodb重新部署,或者切换一个支持你已经安装的mongodb的maven坐标,只不过可能会出现maven冲突的问题。
docker pull mongo:4.0.5
找到对应版本的docker镜像后,安装即可。
安装完成后,没有密码,navicat可以连接,但是springboot无法连接,
在工具中,执行
db.createUser({user:“admin”,pwd:“123456”,roles:[{role:“dbOwner”,db:“good”}]});
即可。
随后在代码中
这样配置就可以连接了。