【问题标题】:how do i connect to multiple databases using spring boot and spring-data for mongodb我如何使用 mongodb 的 spring boot 和 spring-data 连接到多个数据库
【发布时间】:2017-05-09 19:03:58
【问题描述】:

我在我的应用程序中使用 spring-data mongo 存储库和 spring boot。对于单个数据库,我在 application.properties 中添加 db 配置。如果我需要添加另一个数据库,我该如何添加它?以及如何告诉 spring 哪些数据模型/存储库适用于哪个数据库?

谢谢!

【问题讨论】:

标签: mongodb spring-boot spring-data-mongodb


【解决方案1】:

这是一个示例。

//This is like a base class for all your mongoconfigs.   

    public class MongoConfig  {
    private static final Logger LOG = LoggerFactory.getLogger(MongoConfig.class);

    @NoArgsConstructor
    @Getter
    @Setter
    class MongoDbProperties{
        private String host;
        private int port;
        private String dbName;
        private String dbUser;
        private String dbPwd;
    }

    Mongo createMongoClient(ServerAddress serverAddress, MongoCredential... credentials) {

        if (credentials != null && credentials.length > 0) {

            final List<MongoCredential> credentialList = new ArrayList<>();
            credentialList.addAll(Arrays.asList(credentials));

            LOG.info("Creating connection with credentials: " + credentialList);

            return new MongoClient(serverAddress, credentialList;

        } else {
            return new MongoClient(serverAddress);
        }
    }

    Mongo getMongoClient(MongoDbProperties mongoDbProperties) {
        LOG.info("Initializing mongo client for {}. Host={}, Port={} ", mongoDbProperties.getDbName(), mongoDbProperties.getHost(), mongoDbProperties.getPort());
        Mongo mongoClient;
        if(!mongoDbProperties.getDbUser().isEmpty() && !mongoDbProperties.getDbPwd().isEmpty()) {
            MongoCredential credential = MongoCredential.createCredential(mongoDbProperties.getDbUser(), mongoDbProperties.getDbName(), mongoDbProperties.getDbPwd().toCharArray());
            mongoClient = createMongoClient(new ServerAddress(mongoDbProperties.getHost(), mongoDbProperties.getPort()), credential);
        }
        else
            mongoClient = createMongoClient(new ServerAddress(mongoDbProperties.getHost(), mongoDbProperties.getPort()));

        LOG.info("Initializing mongo template for products dataBase={} ", mongoDbProperties.getDbName());
        return mongoClient;
    }


    @Bean
    @ConfigurationProperties(prefix = "mongo.default")
    public MongoOptionsProperties defaultMongoOptionsProperties() {
        return new MongoOptionsProperties();
    }
 }

然后有尽可能多的配置文件作为你想连接的 mongo 数据库,如下所示:

@Configuration
@EnableMongoRepositories(basePackages = "com.product.repository.shop.swiss", mongoTemplateRef = "swissMongoProductTemplate")
class SWissProductMongoConfig extends MongoConfig {

    @Bean(name = "swissMongoProductTemplate")
    public MongoTemplate swissMongoProductTemplate() throws Exception {
        MongoDbProperties mongoDbProperties = shopSWissProductMongoProperties();
        Mongo mongoClient = getMongoClient(mongoDbProperties);
        return new MongoTemplate(mongoClient, mongoDbProperties.getDbName());
    }

        @Bean
        @ConfigurationProperties(prefix = "mongo.product.swiss")
        public MongoDbProperties shopSWissProductMongoProperties(){
            return new MongoDbProperties();
        }
    }

@Configuration
@EnableMongoRepositories(basePackages = "com.product.repository.shop.france", mongoTemplateRef = "franceMongoProductTemplate")
class SWissProductMongoConfig extends MongoConfig {

    @Bean(name = "franceMongoProductTemplate")
    public MongoTemplate franceMongoProductTemplate() throws Exception {
        MongoDbProperties mongoDbProperties = shopFranceProductMongoProperties();
        Mongo mongoClient = getMongoClient(mongoDbProperties);
        return new MongoTemplate(mongoClient, mongoDbProperties.getDbName());
    }

    @Bean
    @ConfigurationProperties(prefix = "mongo.product.france")
    public MongoDbProperties shopFranceProductMongoProperties() {
        return new MongoDbProperties();
    }
}

在你的yml 中有这样的东西

mongo:
  product:
    france :
      dbName: 
      host: 
      port: 
      dbUser:
      dbPwd:
    swiss:
      dbName: 
      host: 
      port: 
      dbUser: 
      dbPwd: 

确保您在注释EnableMongoRepositoriesbasePackages 属性中提到的包中具有存储库类

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2017-11-29
    • 2016-12-12
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多