Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在配置了两个mongo数据库的springboot应用程序中使用MongoAppeations_Java_Mongodb_Spring Boot_Spring Data Jpa_Mongodb Query - Fatal编程技术网

Java 有没有办法在配置了两个mongo数据库的springboot应用程序中使用MongoAppeations

Java 有没有办法在配置了两个mongo数据库的springboot应用程序中使用MongoAppeations,java,mongodb,spring-boot,spring-data-jpa,mongodb-query,Java,Mongodb,Spring Boot,Spring Data Jpa,Mongodb Query,我用springboot做了一个示例应用程序,使用下面的参考连接两个数据库 我可以使用扩展MongoRepository的存储库接口访问不同数据库中的数据 但我想使用MongoOperations访问数据,如下所示如何区分两个数据库 @RestController @RequestMapping(value = "/sample") public class SampleController { private final PrimaryRepository primaryRepos

我用springboot做了一个示例应用程序,使用下面的参考连接两个数据库

我可以使用扩展MongoRepository的存储库接口访问不同数据库中的数据 但我想使用MongoOperations访问数据,如下所示如何区分两个数据库

@RestController
@RequestMapping(value = "/sample")
public class SampleController {

    private final PrimaryRepository primaryRepository;
    private final SecondaryRepositor secondaryRepository;


    @Autowired
    MongoOperations mongoOps;

    @Autowired
    public SampleController(PrimaryRepository primaryRepository, SecondaryRepositor secondaryRepository) {
        this.primaryRepository = primaryRepository;
        this.secondaryRepository = secondaryRepository;
    }

    @RequestMapping(method = RequestMethod.GET)
    public void sample() {
        log.info("************************************************************");
        log.info("Start printing mongo objects");
        log.info("************************************************************");
       primaryRepository.save(new PrimaryModel(null, "Primary database plain object"));

        secondaryRepository.save(new SecondaryModel(null, "Secondary database plain object"));

        List<PrimaryModel> primaries = primaryRepository.findAll();
        for (PrimaryModel primary : primaries) {
            log.info(primary.toString());
        }

        List<SecondaryModel> secondaries = secondaryRepository.findAll();
        **List<SecondaryModel> second =   mongoOps.findAll(SecondaryModel.class);**
        log.info("RES: {}",second);
        for (SecondaryModel secondary : secondaries) {
            log.info(secondary.toString());
        }

        log.info("************************************************************");
        log.info("Ended printing mongo objects");
        log.info("************************************************************");

    }
}```

@RestController
@请求映射(value=“/sample”)
公共类采样控制器{
私有最终主存储库主存储库;
私人最终二级存储库二级存储库;
@自动连线
Mongoop操作Mongoop;
@自动连线
公共样本控制器(PrimaryRepository PrimaryRepository,SecondaryRepositor SecondaryRepositor){
this.primaryRepository=primaryRepository;
this.secondaryRepository=secondaryRepository;
}
@RequestMapping(method=RequestMethod.GET)
公开作废样本(){
日志信息(“**********************************************************************************************************”);
log.info(“开始打印mongo对象”);
日志信息(“**********************************************************************************************************”);
save(新的PrimaryModel(null,“主数据库普通对象”);
secondaryRepository.save(新的SecondaryModel(null,“辅助数据库普通对象”);
List primaries=primarydrepository.findAll();
对于(PrimaryModel primary:primaries){
log.info(primary.toString());
}
List secondaries=secondaryRepository.findAll();
**List second=mongoOps.findAll(SecondaryModel.class)**
log.info(“RES:{}”,第二个);
用于(二级模型二级:二级){
log.info(secondary.toString());
}
日志信息(“**********************************************************************************************************”);
log.info(“已结束打印mongo对象”);
日志信息(“**********************************************************************************************************”);
}
}```

您需要使用
@Qualifier
来获得所需的MongoDB实例

@Autowired
@Qualifier("primaryMongoTemplate")
MongoOperations primaryMongoOps;

@Autowired
@Qualifier("secondaryMongoTemplate")
MongoOperations secondaryMongoOps;
注意:

您不需要
公共SampleController(PrimaryRepository PrimaryRepository,SecondaryRepositor SecondaryRepositor)
,而是使用:

@RestController
@RequestMapping(value = "/sample")
public class SampleController {

    @Autowired
    PrimaryRepository primaryRepository;

    @Autowired
    SecondaryRepositor secondaryRepository;

    @Autowired
    @Qualifier("primaryMongoTemplate")
    MongoOperations primaryMongoOps;

    @Autowired
    @Qualifier("secondaryMongoTemplate")
    MongoOperations secondaryMongoOps;

    @RequestMapping(method = RequestMethod.GET)
    public void sample() {
    ...

您可以创建两个MongoOperations bean。您可以用DB机器IP地址替换
localhost
。如果您有分片集群,您可以更改以下实现
newmongoclient(newmongoclienturi(“mongodb://host1:27017,host2:27017“)

现在在控制器中,您可以插入
MongoTemplate
并连接到相应的数据库

@Autowired
@Qualifier("firstDatabase")
MongoOperations mongoOps1;

@Autowired
@Qualifier("secondDatabase")
MongoOperations mongoOps2;

您可以尝试以下配置以使用多个数据库和Mongoop操作吗 @配置 @EnableMongorPositories(basePackages={“com.company.repo.dbOne”},mongoTemplateRef=“mongoTemplateOne”) 公共类AbcRepoConfiguration{

@Bean(name="mongoPropertiesOne")
@ConfigurationProperties
public MongoProperties mongoProperties() {
    return new MongoProperties();
}

@Bean(name="mongoPropertiesOne")
public SimpleMongoDbFactory mongoDbFactory(MongoClient mongo, @Qualifier("mongoPropertiesOne") MongoProperties mongoProperties) throws Exception {
    String database = this.mongoProperties.getMongoClientDatabase();
    return new SimpleMongoDbFactory(mongo, database);
}

@Bean(name="mongoTemplateOne")
public MongoTemplate mongoTemplate(@Qualifier("mongoTemplateOne") MongoDbFactory mongoDbFactory, MongoConverter converter) throws UnknownHostException {
    return new MongoTemplate(mongoDbFactory, converter);
}
@Bean(name="mongoPropertiesTwo")
@ConfigurationProperties
public MongoProperties mongoProperties() {
    return new MongoProperties();
}

@Bean(name="mongoPropertiesTwo")
public SimpleMongoDbFactory mongoDbFactory(MongoClient mongo, @Qualifier("mongoPropertiesTwo") MongoProperties mongoProperties) throws Exception {
    String database = this.mongoProperties.getMongoClientDatabase();
    return new SimpleMongoDbFactory(mongo, database);
}

@Bean(name="mongoTemplateTwo")
public MongoTemplate mongoTemplate(@Qualifier("mongoTemplateTwo") MongoDbFactory mongoDbFactory, MongoConverter converter) throws UnknownHostException {
    return new MongoTemplate(mongoDbFactory, converter);
}
} @配置 @EnableMongorPositories(basePackages={“com.company.repo.dbTwo”},mongoTemplateRef=“mongoTemplateTwo”) 公共类AbcRepoConfiguration{

@Bean(name="mongoPropertiesOne")
@ConfigurationProperties
public MongoProperties mongoProperties() {
    return new MongoProperties();
}

@Bean(name="mongoPropertiesOne")
public SimpleMongoDbFactory mongoDbFactory(MongoClient mongo, @Qualifier("mongoPropertiesOne") MongoProperties mongoProperties) throws Exception {
    String database = this.mongoProperties.getMongoClientDatabase();
    return new SimpleMongoDbFactory(mongo, database);
}

@Bean(name="mongoTemplateOne")
public MongoTemplate mongoTemplate(@Qualifier("mongoTemplateOne") MongoDbFactory mongoDbFactory, MongoConverter converter) throws UnknownHostException {
    return new MongoTemplate(mongoDbFactory, converter);
}
@Bean(name="mongoPropertiesTwo")
@ConfigurationProperties
public MongoProperties mongoProperties() {
    return new MongoProperties();
}

@Bean(name="mongoPropertiesTwo")
public SimpleMongoDbFactory mongoDbFactory(MongoClient mongo, @Qualifier("mongoPropertiesTwo") MongoProperties mongoProperties) throws Exception {
    String database = this.mongoProperties.getMongoClientDatabase();
    return new SimpleMongoDbFactory(mongo, database);
}

@Bean(name="mongoTemplateTwo")
public MongoTemplate mongoTemplate(@Qualifier("mongoTemplateTwo") MongoDbFactory mongoDbFactory, MongoConverter converter) throws UnknownHostException {
    return new MongoTemplate(mongoDbFactory, converter);
}
}