springboot中mongodb多数据源集成

说完springboot中如何使用mongodb,接下来就来看一下mongod的多数据源集成。因为多数据源在开发中还是很常见的,比如在中小型项目中,我们可以将日志存储在mongo中(单独一个日志库)。

这里只说明一下多数据源的集成方式,springboot中mongo的使用可详见springboot中mongodb集成与使用

mogno多数据源配置

首先我们定义两个数据源配置,如下所示:

mongodb:
  master:
#    uri: mongodb://127.0.0.1:27017/sbac_master
    host: 127.0.0.1
    port: 27017
#    username: sbac
#    password: sbac
    database: sbac_master
  log:
#    uri: mongodb://127.0.0.1:27017/sbac_log
    host: 127.0.0.1
    port: 27017
#    username: sbac
#    password: sbac
    database: sbac_log

这里使用host+port方式,不验证密码,当然亦可以选择uri方式,只是在稍后的配置有所改动即可。

此时,我们来配置我们的多数据源,代码如下所示:

@Configuration
public class MongoConfig {

    @Primary
    @Bean(name = "mongoMasterProperties")
    @ConfigurationProperties(prefix = "mongodb.master")
    public MongoProperties mongoMasterProperties() {
        return new MongoProperties();
    }

    @Bean(name = "mongoLogProperties")
    @ConfigurationProperties(prefix = "mongodb.log")
    public MongoProperties mongoLogProperties() {
        return new MongoProperties();
    }

    @Primary
    @Bean("mongoTemplate")
    public MongoTemplate mongoMasterTemplate(@Qualifier("mongoMasterProperties") MongoProperties mongoProperties) {
        return new MongoTemplate(mongoDbFactory(mongoProperties));
    }

    @Bean("mongoLogTemplate")
    public MongoTemplate mongoLogTemplate(@Qualifier("mongoLogProperties") MongoProperties mongoProperties) {
        return new MongoTemplate(mongoDbFactory(mongoProperties));
    }

    private MongoDbFactory mongoDbFactory(MongoProperties mongoProperties) {
        MongoClient mongoClient = new MongoClient(mongoProperties.getHost(),mongoProperties.getPort());
        return new SimpleMongoDbFactory(mongoClient, mongoProperties.getDatabase());
    }
}

这里我们手动来配置每个数据源的配置属性,以及最后生成MongoTemplate。可以看见,如上是host+port方式构建MongoDbFactory的,如果要使用密码验证,则可以换一个MongoClient的构造函数来生成MongoClient即可(详见MongoClient源码),如下:

        ServerAddress serverAddress = new ServerAddress(mongoProperties.getHost(), mongoProperties.getPort());
        MongoClient mongoClient = new MongoClient(
                serverAddress,
                MongoCredential.createScramSha1Credential(mongoProperties.getUsername(),
                        mongoProperties.getDatabase(), mongoProperties.getPassword()),
                new MongoClientOptions.Builder().build());

或者要使用uri的方式来配置,以如此:

        MongoClient mongoClient = new MongoClient(mongoProperties.getUri());
mongo多数据源使用

由于是使用配置不同的MongoTemplate的形式来形成多数据源,所以这里便用MongoTemplate来使用多数据源,下面给出两个不同数据源的吃持久层代码(因为旨在看使用方式,所以其中po实体以及测试验证代码就不再贴出了)。

master数据源

@Repository
public class UserRepository {

    private MongoTemplate mongoTemplate;

    @Autowired
    public UserRepository(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    public void insert(User user) {
        mongoTemplate.insert(user);
    }

    public User findByUsername(String username) {
        Query query = new Query();
        query.addCriteria(Criteria.where("username").is(username));
        return mongoTemplate.findOne(query, User.class);
    }
}

log数据源

@Repository
public class SystemLogRepository {

    private MongoTemplate mongoLogTemplate;

    @Autowired
    public SystemLogRepository(@Qualifier("mongoLogTemplate") MongoTemplate mongoLogTemplate) {
        this.mongoLogTemplate = mongoLogTemplate;
    }

    public void insert(SystemLog systemLog) {
        mongoLogTemplate.insert(systemLog);
    }

    public List<SystemLog> listLog(Date beginTime, Date endTime) {
        Query query = new Query();
        query.addCriteria(Criteria.where("createTime")
                .lte(endTime).gte(beginTime));
        return mongoLogTemplate.find(query, SystemLog.class);
    }
}
案例源码

案例源码地址:https://github.com/lazycece/springboot-actual-combat/tree/master/springboot-ac-mongodb/springboot-ac-mongodb-multi

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot集成MongoDB多数据源可以通过以下步骤完成: 1. 添加MongoDB依赖:在`pom.xml`文件添加MongoDB驱动的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> ``` 2. 配置MongoDB数据源:在`application.properties`或`application.yml`文件配置MongoDB的连接信息,可以为每个数据源定义一个前缀来区分不同的数据源配置,例如: ```properties # 第一个数据源 spring.data.mongodb.first.uri=mongodb://localhost:27017/db1 spring.data.mongodb.first.database=db1 # 第二个数据源 spring.data.mongodb.second.uri=mongodb://localhost:27017/db2 spring.data.mongodb.second.database=db2 ``` 3. 创建MongoDB配置类:创建一个`@Configuration`注解的配置类,用于配置多个`MongoTemplate`实例,每个实例对应一个数据源。代码示例: ```java @Configuration public class MultipleMongoConfig { @Value("${spring.data.mongodb.first.uri}") private String firstUri; @Value("${spring.data.mongodb.first.database}") private String firstDatabase; @Value("${spring.data.mongodb.second.uri}") private String secondUri; @Value("${spring.data.mongodb.second.database}") private String secondDatabase; @Bean(name = "firstMongoTemplate") public MongoTemplate firstMongoTemplate() throws Exception { return new MongoTemplate(new MongoClientURI(firstUri)); } @Bean(name = "secondMongoTemplate") public MongoTemplate secondMongoTemplate() throws Exception { return new MongoTemplate(new MongoClientURI(secondUri)); } } ``` 4. 使用多个MongoTemplate:在需要使用不同数据源的地方,可以通过`@Qualifier`注解指定使用哪个`MongoTemplate`实例。示例代码: ```java @Service public class MyService { private final MongoTemplate firstMongoTemplate; private final MongoTemplate secondMongoTemplate; public MyService(@Qualifier("firstMongoTemplate") MongoTemplate firstMongoTemplate, @Qualifier("secondMongoTemplate") MongoTemplate secondMongoTemplate) { this.firstMongoTemplate = firstMongoTemplate; this.secondMongoTemplate = secondMongoTemplate; } // 使用 firstMongoTemplate 操作第一个数据源 // 使用 secondMongoTemplate 操作第二个数据源 } ``` 通过上述步骤,你可以在Spring Boot成功集成多个MongoDB数据源。记得按照实际情况修改配置信息并进行适当调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值