/edison-mongo/src/main/java/de/otto/edison/mongo/configuration/MongoConfiguration.java

https://github.com/otto-de/edison-microservice · Java · 70 lines · 56 code · 14 blank · 0 comment · 0 complexity · c7d0a7bc39f3e4d0cd2774ef5cb28cbb MD5 · raw file

  1. package de.otto.edison.mongo.configuration;
  2. import com.mongodb.*;
  3. import com.mongodb.client.MongoClient;
  4. import com.mongodb.client.MongoClients;
  5. import com.mongodb.client.MongoDatabase;
  6. import org.bson.codecs.configuration.CodecRegistry;
  7. import org.slf4j.Logger;
  8. import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
  9. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  10. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  11. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  12. import org.springframework.context.annotation.Bean;
  13. import org.springframework.context.annotation.Configuration;
  14. import org.springframework.context.annotation.Primary;
  15. import java.util.List;
  16. import static com.mongodb.MongoCredential.createCredential;
  17. import static org.slf4j.LoggerFactory.getLogger;
  18. @Configuration
  19. @ConditionalOnProperty(prefix = "edison.mongo", name = "db")
  20. @EnableConfigurationProperties(MongoProperties.class)
  21. public class MongoConfiguration {
  22. private static final Logger LOG = getLogger(MongoConfiguration.class);
  23. @Bean
  24. @ConditionalOnMissingBean(CodecRegistry.class)
  25. public CodecRegistry codecRegistry() {
  26. return MongoClientSettings.getDefaultCodecRegistry();
  27. }
  28. @ConditionalOnClass(name = "com.github.luben.zstd.Zstd")
  29. @Bean
  30. public MongoCompressor zsdtCompressor() {
  31. return MongoCompressor.createZstdCompressor();
  32. }
  33. @ConditionalOnClass(name = "org.xerial.snappy.Snappy")
  34. @Bean
  35. public MongoCompressor snappyCompressor() {
  36. return MongoCompressor.createSnappyCompressor();
  37. }
  38. @Bean
  39. public MongoCompressor zlibCompressor() {
  40. return MongoCompressor.createZlibCompressor();
  41. }
  42. @Bean
  43. @Primary
  44. @ConditionalOnMissingBean(name = "mongoClient", value = MongoClient.class)
  45. public MongoClient mongoClient(final MongoProperties mongoProperties, List<MongoCompressor> possibleCompressors) {
  46. LOG.info("Creating MongoClient");
  47. MongoClientSettings mongoClientSettings = mongoProperties.toMongoClientSettings(codecRegistry(), possibleCompressors);
  48. return MongoClients.create(mongoClientSettings);
  49. }
  50. @Bean
  51. @Primary
  52. @ConditionalOnMissingBean(name = "mongoDatabase", value = MongoDatabase.class)
  53. public MongoDatabase mongoDatabase(final MongoClient mongoClient, final MongoProperties mongoProperties) {
  54. return mongoClient.getDatabase(mongoProperties.getDb());
  55. }
  56. }