springboot-mongodb的多数据源配置的方法步骤

作者:bronk 时间:2022-05-06 12:04:48 

在日常工作中,我们可能需要连接多个MongoDB数据源,比如用户库user,日志库log。本章我们来记录连接多个数据源的步骤,以两个数据源为例,多个数据源类推。

1、pom.xml中引入mongodb的依赖


<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-autoconfigure</artifactId>
 <version>RELEASE</version>
</dependency>

Lombok - 是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。简单试了以下这个工具还挺好玩的,加上注解我们就不用手动写 getter\setter、构建方式类似的代码了。

2, yml配置:


mongodb:
primary:
 host: 192.168.9.60
 port: 20000
 database: test
secondary:
 host: 192.168.9.60
 port: 20000
 database: test1

3, 配置2个库的数据源:


@Data
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {

private MongoProperties primary = new MongoProperties();
 private MongoProperties secondary = new MongoProperties();
}

3.1) 第一个库封装:


@Configuration
@EnableMongoRepositories(basePackages = "com.neo.model.repository.primary",
   mongoTemplateRef = PrimaryMongoConfig.MONGO_TEMPLATE)
public class PrimaryMongoConfig {

protected static final String MONGO_TEMPLATE = "primaryMongoTemplate";
}

3.2) 第二个库封装 :


@Configuration
@EnableMongoRepositories(basePackages = "com.neo.model.repository.secondary",
   mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {

protected static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}

3.3) mongoTemplate:


@Configuration
public class MultipleMongoConfig {

@Autowired
 private MultipleMongoProperties mongoProperties;

@Primary
 @Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
 public MongoTemplate primaryMongoTemplate() throws Exception {
   return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
 }

@Bean
 @Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
 public MongoTemplate secondaryMongoTemplate() throws Exception {
   return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
 }

@Bean
 @Primary
 public MongoDbFactory primaryFactory(MongoProperties mongo) throws Exception {
   return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
       mongo.getDatabase());
 }

@Bean
 public MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {
   return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
       mongo.getDatabase());
 }
}

4, 创建2个库对应的repository:


@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "first_mongo")
public class PrimaryMongoObject {

@Id
 private String id;

private String value;

@Override
 public String toString() {
   return "PrimaryMongoObject{" + "id='" + id + '\'' + ", value='" + value + '\''
       + '}';
 }
}

public interface PrimaryRepository extends MongoRepository<PrimaryMongoObject, String> {
}

测试:


@RunWith(SpringRunner.class)
@SpringBootTest
public class MuliDatabaseTest {

@Autowired
 private PrimaryRepository primaryRepository;

@Autowired
 private SecondaryRepository secondaryRepository;

@Test
 public void TestSave() {

System.out.println("************************************************************");
   System.out.println("测试开始");
   System.out.println("************************************************************");

this.primaryRepository
       .save(new PrimaryMongoObject(null, "第一个库的对象"));

this.secondaryRepository
       .save(new SecondaryMongoObject(null, "第二个库的对象"));

List<PrimaryMongoObject> primaries = this.primaryRepository.findAll();
   for (PrimaryMongoObject primary : primaries) {
     System.out.println(primary.toString());
   }

List<SecondaryMongoObject> secondaries = this.secondaryRepository.findAll();

for (SecondaryMongoObject secondary : secondaries) {
     System.out.println(secondary.toString());
   }

System.out.println("************************************************************");
   System.out.println("测试完成");
   System.out.println("************************************************************");
 }

}

来源:https://www.cnblogs.com/wenbronk/p/6933602.html

标签:springboot,mongodb,多数据源
0
投稿

猜你喜欢

  • Spring maven filtering使用方法详解

    2021-07-02 22:14:46
  • Java中\\n和\\r区别

    2023-01-16 10:38:53
  • MyBatis中map的应用与模糊查询实现代码

    2021-09-02 18:27:14
  • C#数据导入到EXCEL的方法

    2023-01-16 02:27:26
  • Android简单使用PopupWindow的方法

    2023-09-13 19:51:22
  • Java类加载机制实现流程及原理详解

    2022-05-26 02:53:24
  • Android Compose 属性动画使用探索详解

    2022-08-07 11:06:57
  • C#四舍五入(函数)用法实例

    2022-02-03 21:51:16
  • springboot整合mybatis实现数据库的更新批处理方式

    2023-11-29 07:08:37
  • OpenJDK源码调试图文教程

    2022-09-26 01:40:25
  • Android利用RecyclerView实现列表倒计时效果

    2023-09-04 05:29:27
  • Java并发编程同步器CountDownLatch

    2022-10-17 18:59:34
  • Spring Boot 2.7.6整合redis与低版本的区别

    2023-11-11 19:44:56
  • Java基础之并发相关知识总结

    2022-04-24 13:59:05
  • SpringMVC中Model与Session的区别说明

    2023-07-07 20:42:58
  • WPF实现动画效果

    2023-06-26 17:49:44
  • visual studio 2019安装配置可编写c/c++语言的IDE环境

    2023-10-04 02:01:02
  • java实现支付宝退款功能

    2021-09-25 14:00:00
  • Spring boot @RequestBody数据传递过程详解

    2022-09-14 12:23:37
  • 详解Kotlin和anko融合进行Android开发

    2021-08-15 19:34:16
  • asp之家 软件编程 m.aspxhome.com