SpringBoot配置MongoDB多数剧源

关闭Mongo的自动化配置

因为项目需要配置MongoDB多数据源.
为了避免Spring boot自动化配置带来的影响,因此通过注解屏蔽MongoDB自动化配置.

@SpringBootApplication(exclude =
        {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class StatApplication {

    public static void main(String[] args) {

        SpringApplication.run(StatApplication.class, args);
    }
}

配置文件

个人倾向于使用uri方式初始化MongoClient,配置如下所示:

mongodb:
  meta:
    uri: mongodb://*:27017/admin?maxPoolSize=64
  stat:
    uri: mongodb://*:27017/stat?maxPoolSize=64

配置代码

@Data
@Configuration
public class MorphiaConfig {

    @Value("${mongodb.meta.uri}")
    private String metaUri;

    @Value("${mongodb.stat.uri}")
    private String statUri;

    @Bean("metaMongoClient")
    public MongoClient metaMongoClient() {
        final MongoClientOptions.Builder builder = MongoClientOptions.builder()
                .maxConnectionIdleTime(6000)
                .maxConnectionLifeTime(0);
        return new MongoClient(new MongoClientURI(metaUri, builder));
    }

    @Bean("statMongoClient")
    public MongoClient statMongoClient() {
        final MongoClientOptions.Builder builder = MongoClientOptions.builder()
                .maxConnectionIdleTime(6000)
                .maxConnectionLifeTime(0);
        return new MongoClient(new MongoClientURI(statUri, builder));
    }

    @Bean("metaDataStore")
    public Datastore metaDataStore(@Autowired @Qualifier("metaMongoClient") MongoClient mongoClient) {
        Morphia res = new Morphia();
        // 扫描实体类
        res.mapPackage("com.*.*.entity.meta");
        Datastore datastore = res.createDatastore(mongoClient, "metadata");
        // 建立索引
        datastore.ensureIndexes();
        return datastore;
    }

    @Bean("statDataStore")
    public Datastore statDataStore(@Autowired @Qualifier("statMongoClient") MongoClient mongoClient) {
        Morphia res = new Morphia();
        // 扫描实体类
        res.mapPackage("com.*.*.entity.stat");
        Datastore datastore = res.createDatastore(mongoClient, "stat");
        // 建立索引
        datastore.ensureIndexes();
        return datastore;
    }
}

通过以上代码,就可以建立两个独立的Datastore对象,可以通过对应的Bean name进行引入.

PS:
如果您觉得我的文章对您有帮助,请关注我的微信公众号,谢谢!
程序员打怪之路

posted @ 2019-06-27 10:25  从此寂静无声  阅读(1201)  评论(0编辑  收藏  举报