SpringBoot2.1.9 多MongoDB配置自动扫描

 一、配置文件

pom.xml

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

application.yml

spring:
  application:
    name: double-mongo
  profiles:
    active: dev

  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

server:
  port: 8008

sys:
  mongodb:
     one:
        uri: mongodb://user01:admin123@192.168.1.2:10135,192.168.1.3:10135/mongo01
     two:
        uri: mongodb://user02:admin123@192.168.1.2:10135,192.168.1.3:10135/mongo02

二、配置Configuration Bean

(1)第一个mongodb配置(主)

@EnableMongoRepositories(repositoryBaseClass = AbstractMongoRepository.class, basePackages = "com.mk.spingboot.mongo.repository.one",
mongoTemplateRef = "mongoTemplate")
public class OneMongoConfig {

    private MongoClient mongo;

    @Primary//必须设置默认的mongo模板,默认名字必须为mongoTemplate
    @Bean("mongoTemplate")
    public MongoTemplate oneMongoTemplate(@Autowired @Qualifier("oneMongoDbFactory")MongoDbFactory mongoDbFactory, MongoConverter converter) {
        return new MongoTemplate(mongoDbFactory, converter);
    }

    @Primary//必须设置默认的mongo工厂
    @Bean
    public MongoDbFactory oneMongoDbFactory(@Autowired @Qualifier("oneMongoProperties")MongoProperties properties,
                                                  Environment environment, ObjectProvider<MongoClientOptions> options) {
        MongoClientOptions _options = options.getIfAvailable();
        MongoClientFactory mongoClientFactory = new MongoClientFactory(properties, environment);
        this.mongo = mongoClientFactory.createMongoClient(_options);
        return new SimpleMongoDbFactory(this.mongo, properties.getMongoClientDatabase());
    }


    @PreDestroy
    public void close() {
        if (this.mongo != null) {
            this.mongo.close();
        }
    }

    @Primary//必须设置默认的mongo配置
    @Bean
    @ConfigurationProperties(prefix = "sys.mongodb.one")
    public MongoProperties oneMongoProperties(){
        return new MongoProperties();
    }

}

(2)第二个mongo配置

@EnableMongoRepositories(repositoryBaseClass = AbstractMongoRepository.class, basePackages = "com.mk.spingboot.mongo.repository.two",
mongoTemplateRef = "twoMongoTemplate")
public class TwoMongoConfig {

    private MongoClient mongo;

    @Bean
    public MongoTemplate twoMongoTemplate(@Autowired @Qualifier("twoMongoDbFactory")MongoDbFactory mongoDbFactory, MongoConverter converter) {
        return new MongoTemplate(mongoDbFactory, converter);
    }


    @Bean
    public MongoDbFactory twoMongoDbFactory(@Autowired @Qualifier("twoMongoProperties")MongoProperties properties,
                                                  Environment environment, ObjectProvider<MongoClientOptions> options) {
        MongoClientOptions _options = options.getIfAvailable();
        MongoClientFactory mongoClientFactory = new MongoClientFactory(properties, environment);
        this.mongo = mongoClientFactory.createMongoClient(_options);
        return new SimpleMongoDbFactory(this.mongo, properties.getMongoClientDatabase());
    }


    @PreDestroy
    public void close() {
        if (this.mongo != null) {
            this.mongo.close();
        }
    }

    @Bean
    @ConfigurationProperties(prefix = "sys.mongodb.two")
    public MongoProperties twoMongoProperties(){
        return new MongoProperties();
    }

}

(3)mongo导入配置

@Configuration
@Import({OneMongoConfig.class, TwoMongoConfig.class})
public class MongoConfig {

}

posted @ 2022-10-01 17:41  茅坤宝骏氹  阅读(3)  评论(0)    收藏  举报  来源