mongodb多数据源配置
引入spring-data 依赖, 注意引入版本, 不同版本对应的api方法不一样<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.
·
引入spring-data 依赖, 注意引入版本, 不同版本对应的api方法不一样
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.5.6</version>
</dependency>
数据源配置,多个数据源
spring:
mongodb:
primary:
uri: mongodb://username1:password1@localost:27018/db1
secondary:
uri: mongodb://username2:password2@localost:27018/db2
thirdly:
uri: mongodb://username3:password3@localost:27018/db3
配置类
@Data
public abstract class AbstractMongoConfig {
private String uri;
abstract public MongoTemplate getMongoTemplate();
public SimpleMongoClientDatabaseFactory mongodbFactory() {
return new SimpleMongoClientDatabaseFactory(uri);
}
}
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.primary")
public class PrimaryMongoConfig extends AbstractMongoConfig {
@Primary //默认会注入此数据源的Template
@Bean(name = "primaryMongoTemplate")
@Override
public MongoTemplate getMongoTemplate() {
return new MongoTemplate(mongodbFactory());
}
@Bean(name = "primaryGridFsTemplate") //用于gridfs查询
public GridFsTemplate getGridFsTemplate(MongoConverter converter) {
return new GridFsTemplate(mongodbFactory(), converter, "fs");
}
@Bean(name = "primaryGridFsBucket") //用于gridfs文件下载
public GridFSBucket getGridFSBucket() {
return GridFSBuckets.create(mongodbFactory().getMongoDatabase(), "fs");
}
}
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.secondary")
public class SecondaryMongoConfig extends AbstractMongoConfig {
@Bean(name = "secondaryMongoTemplate")
@Override
public MongoTemplate getMongoTemplate() {
return new MongoTemplate(mongodbFactory());
}
@Bean(name = "secondaryGridFsTemplate") //用于gridfs查询
public GridFsTemplate getGridFsTemplate(MongoConverter converter) {
return new GridFsTemplate(mongodbFactory(), converter, "fs");
}
@Bean(name = "secondaryGridFsBucket") //用于gridfs文件下载
public GridFSBucket getGridFSBucket() {
return GridFSBuckets.create(mongodbFactory().getMongoDatabase(), "fs");
}
}
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.thirdly")
public class ThirdlyMongoConfig extends AbstractMongoConfig {
@Bean(name = "thirdlyMongoTemplate")
@Override
public MongoTemplate getMongoTemplate() {
return new MongoTemplate(mongodbFactory());
}
@Bean(name = "thirdlyGridFsTemplate") //用于gridfs查询
public GridFsTemplate getGridFsTemplate(MongoConverter converter) {
return new GridFsTemplate(mongodbFactory(), converter, "fs");
}
@Bean(name = "thirdlyGridFsBucket") //用于gridfs文件下载
public GridFSBucket getGridFSBucket() {
return GridFSBuckets.create(mongodbFactory().getMongoDatabase(), "fs");
}
}
注入MongoTemplate 进行增删改查
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
@Qualifier("secondaryMongoTemplate")
private MongoTemplate template2;
@Autowired
@Qualifier("thirdlyMongoTemplate")
private MongoTemplate template3;
@Resource
@Qualifier("primaryGridFsTemplate")
private GridFsTemplate primaryGridFsTemplate;
@Resource
@Qualifier("primaryGridFsBucket")
private GridFSBucket primaryGridFsBucket;
public HistoryDeleteVo deleteOne(HistoryDeleteRequest request) {
String id = request.getId();
if (StringUtils.isEmpty(id)) {
throw new EsException("id不能为空");
}
History one = mongoTemplate.findById(id, History.class);
if (one == null) {
throw new EsException("要删除的数据不存在");
}
mongoTemplate.remove(one);
HistoryDeleteVo vo = new HistoryDeleteVo();
vo.setSuccess(true);
vo.setDelete_count(1);
return vo;
}
public History getHistoryById(String id) {
Query query = Query.query(Criteria.where("id").is(id));
History history = mongoTemplate.findOne(query, History.class);
if (history == null) {
throw new EsException("mongo中不存在该历史记录");
}
return history;
}
//查询gridFs是的文件
public void testQuery() {
String filename1 = "CN202110428069.4";
Query query1 = Query.query(Criteria.where("filename").regex("^" + filename1 + "."));
GridFSFile one = primaryGridFsTemplate.findOne(query1);
if (one != null) {
//打印gridFS的id
System.out.println(one.getObjectId());
}
}
//下载gridFs中的文件
public void downFile() {
//根据id查询文件
GridFSFile gridFSFile = primaryGridFsTemplate.findOne(Query.query(Criteria.where("_id").is("623d93f44c63117424ce02e0")));
if (gridFSFile != null) {
//打开一个下载流对象
GridFSDownloadStream gridFSDownloadStream = primaryGridFsBucket.openDownloadStream(gridFSFile.getObjectId());
//创建GridFsResource对象,获取流
GridFsResource gridFsResource = new GridFsResource(gridFSFile, gridFSDownloadStream);
//从流中获取数据
String content = IOUtils.toString(gridFsResource.getInputStream(), StandardCharsets.UTF_8);
System.out.println(content);
}
}
更多推荐
已为社区贡献5条内容
所有评论(0)