pom等相关配置参考“SpringBoot简单连接MongoDB”博客。
MongoTemplate是对是对原生数据库进行操作灵活,MongoRepository是基于实体类,对数据操作进行了封装,不够灵活。
此处使用的是Mongodb自定义装配!!!
1 application.yml
# 注意先创建prod、dev两个数据库,账号m在这里插入代码片ason,密码123456相同
spring:
data:
mongodb:
prod:
uri: mongodb://mason:123456@192.168.108.60:27017/prod
dev:
uri: mongodb://mason:123456@192.168.108.60:27017/dev
2 配置模板
2.1 AbstractMongoConfig
import com.mongodb.MongoClientURI;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory;
public abstract class AbstractMongoConfig {
// It is the uri of mongo
private String uri;
// It is the factory
public abstract MongoTemplate getMongoTemplate() throws Exception;
// Instance the factory
public MongoDbFactory mongodbFactory() throws Exception {
// Init the factory of mongo
MongoClientURI mongoclienturi = new MongoClientURI(uri);
return new SimpleMongoClientDbFactory(String.valueOf(mongoclienturi));
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
}
2.2 ProdMongoConfig
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
@Configuration
// The prefix from application.yml
// 自动装配prod下的属性
// 此处会自动配置从AbstractMongoConfig继承的uri属性
@ConfigurationProperties(prefix = "spring.data.mongodb.prod")
public class ProdMongoConfig extends AbstractMongoConfig {
@Primary
@Override
@Bean(name = "prodMongodbTemplate")
public MongoTemplate getMongoTemplate() throws Exception {
// Remove the tag of '_class'
MappingMongoConverter converter = new MappingMongoConverter(mongodbFactory(), new MongoMappingContext());
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
// The method of mongodbFactory() from AbstractMongoConfig
return new MongoTemplate(mongodbFactory(), converter);
}
}
2.3 DevMongoConfig
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.dev")
public class DevMongoConfig extends AbstractMongoConfig{
@Override
@Bean(name = "devMongodbTemplate")
public MongoTemplate getMongoTemplate() throws Exception {
// Remove the tag of '_class'
MappingMongoConverter converter = new MappingMongoConverter(mongodbFactory(), new MongoMappingContext());
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return new MongoTemplate(mongodbFactory(), converter);
}
}
2.4 MongoClientConfig
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
@Configuration
public class MongoClientConfig {
@Autowired
private MongoTemplate mongoTemplate;
@Bean
public MongoTemplate mongoTemplate() {
return this.mongoTemplate;
}
}
3 MymongoApplication
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
// 禁止Mongodb自动装配,如果不设置会提示如下错误
// Caused by: java.net.ConnectException: Connection refused: connect
@SpringBootApplication(exclude = MongoAutoConfiguration.class)
public class MymongoApplication {
public static void main(String[] args) {
SpringApplication.run(MymongoApplication.class, args);
}
}
4 应用
@Autowired
private MongoTemplate mongoTemplate;
@Test
void contextLoads() {
Map<String, String> params = new HashMap<>();
params.put("title", "java book");
BasicDBObject val = new BasicDBObject(params);
val.put("author", "China");
mongoTemplate.insert(val, "new_book");
}