版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/marvHuang/article/details/82921336
- pom包的设置:添加lombok和spring-boot-autoconfigure包引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>RELEASE</version>
</dependency>
- 配置文件使用YAML的形式添加两条数据源,如下:
mongodb:
primary:
host: 192.168.9.60
port: 20000
database: test
secondary:
host: 192.168.9.60
port: 20000
database: test1
本mongodb环境没有设置权限认证。
- 配置两个库的数据源(包括MongoDbFactory和MongoTemplate的配置)
加载数据源配置对象MultipleMongoProperties
@Data
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {
private MongoProperties primary = new MongoProperties();
private MongoProperties secondary = new MongoProperties();
}
配置不同包路径下使用不同的数据源
第一个库的封装
@Configuration
@EnableMongoRepositories(basePackages = "com.neo.model.repository.primary",
mongoTemplateRef = PrimaryMongoConfig.MONGO_TEMPLATE)
public class PrimaryMongoConfig {
protected static final String MONGO_TEMPLATE = "primaryMongoTemplate";
}
第二个库的封装
@Configuration
@EnableMongoRepositories(basePackages = "com.neo.model.repository.secondary",
mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {
protected static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}
读取对应的配置信息并且构造对应的MongoTemplate(创建各数据源的MongoTemplate)
/**
* 获取各数据源MongoTemplate
*
*/
@Configuration
public class MultipleMongoConfig {
@Autowired
private MultipleMongoProperties mongoProperties;
@Primary
@Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate primaryMongoTemplate() throws Exception {
return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
}
@Bean
@Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate secondaryMongoTemplate() throws Exception {
return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
}
@Bean
@Primary
public MongoDbFactory primaryFactory(MongoProperties mongo) throws Exception {
return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
mongo.getDatabase());
}
@Bean
public MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {
return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
mongo.getDatabase());
}
}
本实例mongodb环境没有设置权限认证的,可以简单的通过newSimpleMongoDbFactory(newMongoClient(host, port), database)实现对MongoDbFactory的创建。
- 创建两个库分别对应的对象和Repository
借助lombok来构建对象
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "first_mongo")
public class PrimaryMongoObject {
@Id
private String id;
private String value;
@Override
public String toString() {
return "PrimaryMongoObject{" + "id='" + id + '\'' + ", value='" + value + '\''
+ '}';
}
}
对应的Repository
public interface PrimaryRepository extends MongoRepository<PrimaryMongoObject, String> {
}
public interface SecondaryRepository extends MongoRepository<SecondaryMongoObject, String> {
}
继承了 MongoRepository会默认实现很多基本的增删改查,省了很多自己写dao层的代码。
- 实现service层的开发