封装mongodb遇到的坑

た 入场券 2021-12-14 14:11 352阅读 0赞

项目中想用mongodb,各工程都会用到,所以打算把它封装在common包里。期间遇到几个问题,这里记录一下。

1、mongodb的配置文件是放在common包中还是放在各个要调用mongodb的工程中?

由于考虑到所有的工程都是调用同一个mongodb服务,所以最终决定将配置文件放在common包里。

2、配置文件是用bootstrap.yml还是application.yml?

一开始用的是bootstrap.yml,但是发现启动调用common包的工程时会报错,后来查了查,发现bootstrap.yml 先于 application.yml 加载,导致工程启动时没有获取到mongodb的配置(也可能不全是这个原因,加载不到配置文件,跟下面的一个问题也有关系),后来改成了application.yml启动成功。

  1. spring:
  2. data:
  3. mongodb:
  4. uri: mongodb://admin:admin@192.168.1.1:27017/admin
  5. dbname: admin

3、common包没有自动加载配置文件

不知道什么原因,mongodb配置文件没有自动加载,所以单独写了一个mongodb的配置类来读取mongodb的配置文件。

  1. package com.company.mongodb;
  2. import com.mongodb.MongoClient;
  3. import com.mongodb.MongoClientURI;
  4. import lombok.Data;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.data.mongodb.core.MongoTemplate;
  9. /**
  10. * @Description:mongodb配置类
  11. *
  12. */
  13. @Data
  14. @Configuration
  15. public class MongoConfig {
  16. /**
  17. * 读取mongdb配置文件uri
  18. */
  19. @Value("${spring.data.mongodb.uri}")
  20. private String mongodbUri;
  21. /**
  22. * 读取mongdb配置文件数据库名称
  23. */
  24. @Value("${spring.data.mongodb.dbname}")
  25. private String dbname;
  26. @Bean
  27. public MongoClient mongoClient() {
  28. //MongoClient client=new MongoClient(new MongoClientURI("mongodb://admin:admin@127.0.0.1:27017/admin"));
  29. MongoClient client = new MongoClient(new MongoClientURI(mongodbUri));
  30. return client;
  31. }
  32. @Bean
  33. public MongoTemplate mongoTemplate() {
  34. //return new MongoTemplate(mongoClient(), "admin");
  35. return new MongoTemplate(mongoClient(), dbname);
  36. }
  37. }

但是启动调用的工程时,还是报错。后来查了资料,说要在启动类上移出mongodb的自动配置。

  1. @EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
  2. package com.company;
  3. import com.bolt.core.launch.BoltApplication;
  4. import com.bolt.core.launch.constant.AppConstant;
  5. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  6. import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
  7. import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
  8. import org.springframework.cloud.client.SpringCloudApplication;
  9. import org.springframework.cloud.openfeign.EnableFeignClients;
  10. /**
  11. * 系统模块启动器 *
  12. *
  13. */
  14. @EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
  15. @SpringCloudApplication
  16. @EnableFeignClients(AppConstant.BASE_PACKAGES)
  17. public class SystemApplication {
  18. public static void main(String[] args) {
  19. Application.run("company-system", SystemApplication.class, args);
  20. }
  21. }

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Xposed遇到

    如果某个APP的dex有多个在安卓5,0以上ART会合成一个oat文件。那么5.0以下会存在多个dex。 所以在5.0以下hook一个某个方法,而这个方法不在主dex,而存

    相关 封装mongodb遇到

    项目中想用mongodb,各工程都会用到,所以打算把它封装在common包里。期间遇到几个问题,这里记录一下。 1、mongodb的配置文件是放在common包中还是放在各个

    相关 Hibernate 遇到

    传统的java开发中,通常分领域模型,model。在对数据进行保存的时候通常一般会保存到vo中,显示数据到页面的时候通常是dto,前几天遇到个坑,在dto中封装实体对象,...