2017-05-09 1 views
1

J'utilise des bases de données mongo spring-data et spring boot dans mon application. Pour une base de données unique, j'ajoute la configuration db dans application.properties. Si je dois ajouter une autre base de données, comment l'ajouter? Et comment dire au printemps quels modèles de données/référentiels sont pour quelle base de données?Comment puis-je me connecter à plusieurs bases de données en utilisant spring boot et spring-data pour mongodb?

merci!

+0

Je pense que cela a déjà répondu. Vérifiez http://stackoverflow.com/questions/27614301/spring-boot-multiple-datasource – Bhargav

+0

Voir [ce référentiel Github] (https://github.com/binarycodifier/multiple-mongodb-databases-using-spring-data) à titre d'exemple. – manish

+0

Copie possible de [Spring Boot Configurer et utiliser deux sources de données] (http://stackoverflow.com/questions/30337582/spring-boot-configure-and-use-two-datasources) –

Répondre

0

Voici un exemple.

//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(); 
    } 
} 

Ensuite, ayez autant de fichiers de configuration que de daongos mongo auxquelles vous voulez vous connecter comme ceci.

@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(); 
     } 
    } 

quelque chose comme ceci dans votre YML

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

Assurez-vous que vous avez les classes de référentiel dans les packages mentionnés dans l'attribut basePackages de annotaion EnableMongoRepositories