上一篇文章介绍了springboot自动集成MongoDB,今天分享的是手动集成MongoDB,使用MongoDatabase,不使用spring的MongoTemplate
这里还是用上次建立的用户连接test库
手动集成配置一样非常简单
1.pom.xml文件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
还是一样只需要spring-boot-starter-data-mongodb就ok
2.application配置文件:
# 自己利用mongoDatabase集成MongoDB
mongo.username=mrzhou
mongo.password=123456
mongo.database=test
mongo.authDatabase=test
mongo.hosts=localhost:27017
多台MongoDB集群还是一样用逗号分隔:ip1:port1,ip2:port2
3.创建mongoConfig.java文件:
@Configuration
public class MongoConfig {
@Value("${mongo.username}")
private String username;
@Value("${mongo.password}")
private String password;
@Value("${mongo.database}")
private String database;
@Value("${mongo.authDatabase}")
private String authDatabase;
@Value("${mongo.hosts}")
private String hosts;
@Bean
public MongoDatabase mongoDatabase() {
// 支持集群
String[] hostPort;
ServerAddress serverAddress;
List<ServerAddress> addressList = new ArrayList<>();
String[] host = hosts.indexOf(",") == -1? new String[]{hosts}:hosts.split(",");
for (int i = 0; i < host.length; i++) {
hostPort = host[i].split(":");
serverAddress = new ServerAddress(hostPort[0], Integer.parseInt(hostPort[1]));
addressList.add(serverAddress);
}
// mongo用户信息认证
MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(username, authDatabase, password.toCharArray());
// mongo连接属性
MongoClientOptions.Builder options = new MongoClientOptions.Builder();
MongoClient mongoClient = new MongoClient(addressList, mongoCredential, options.build());
return mongoClient.getDatabase(database);
}
}
全部配置都已完成,接下来验证下是否OK?
service:
public interface IMongoDemoService {
String query();
}
实现类serviceImpl:
@Service
public class MongoDemoServiceImpl implements IMongoDemoService {
private final static String COLLECTION_NAME = "myTest";
@Autowired
private MongoDatabase mongoDatabase;
@Override
public String query() {
String result = null;
MongoCollection mongoCollection = mongoDatabase.getCollection(COLLECTION_NAME);
BasicDBObject basicDBObject = new BasicDBObject();
basicDBObject.put("value", "hello world");
FindIterable<Document> iterable = mongoCollection.find();
for (Document document : iterable) {
result = document.get("value").toString();
}
return result;
}
}
对于上面查询条件有疑惑的去看看MongoDB查询语法,他是Bson结构的(跟json语法差不多);返回结果也是Bson,在项目中使用最好写一个公共的方法,将Document转换成JavaBean及将JavaBean转换成Document。
controller:
@RestController
@RequestMapping("/demo")
public class MongoDemoController {
@Autowired
private IMongoDemoService mongoDemoServiceImpl;
@PostMapping("/query")
public String query() {
return mongoDemoServiceImpl.query();
}
}
用postman请求,得到结果:
或者用uri配置:
@Configuration
public class MongoConfig {
// 建议写到配置文件
private String uri = "mongodb://mrzhou:123456@localhost:27017/test";
@Bean
public MongoDatabase mongoDatabase() {
// 支持集群,多台MongoDB服务:mongodb://user:pwd@ip1:port1,ip2:port2/test
MongoClientOptions.Builder options = new MongoClientOptions.Builder();
MongoClientURI mongoClientURI = new MongoClientURI(uri, options);
MongoClient mongoClient = new MongoClient(mongoClientURI);
return mongoClient.getDatabase(database);
}
}
是不是没有想象中那么难,那么你更喜欢用哪种方式呢?