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
Je pense que cela a déjà répondu. Vérifiez http://stackoverflow.com/questions/27614301/spring-boot-multiple-datasource – Bhargav
Voir [ce référentiel Github] (https://github.com/binarycodifier/multiple-mongodb-databases-using-spring-data) à titre d'exemple. – manish
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) –