引入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);
        }
    }
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐