暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringBoot 中MongoDB多数据源配置

TC 谈 2019-12-18
431

数据库

新建两个数据库 firstDB 、secondDB

并添加用户 login

application.properties

在 application.properties 文件中配置

  1. spring.data.mongodb.first.host=localhost

  2. spring.data.mongodb.first.port=27017

  3. spring.data.mongodb.first.database=firstDB

  4. spring.data.mongodb.first.username=login

  5. spring.data.mongodb.first.password=123456

  6. spring.data.mongodb.second.host=localhost

  7. spring.data.mongodb.second.port=27017

  8. spring.data.mongodb.second.database=secondDB

  9. spring.data.mongodb.second.username=login

  10. spring.data.mongodb.second.password=123456

配置多数据源
  1. package com.tcwong.mongodb.config;

  2. import com.mongodb.MongoClient;

  3. import com.mongodb.MongoClientOptions;

  4. import com.mongodb.MongoCredential;

  5. import com.mongodb.ServerAddress;

  6. import org.springframework.beans.factory.annotation.Qualifier;

  7. import org.springframework.boot.autoconfigure.mongo.MongoProperties;

  8. import org.springframework.boot.context.properties.ConfigurationProperties;

  9. import org.springframework.context.annotation.Bean;

  10. import org.springframework.context.annotation.Configuration;

  11. import org.springframework.context.annotation.Primary;

  12. import org.springframework.data.mongodb.MongoDbFactory;

  13. import org.springframework.data.mongodb.core.MongoTemplate;

  14. import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

  15. import java.util.ArrayList;

  16. import java.util.List;


  17. @Configuration

  18. public class MongoTemplateConfig {


  19. [@Primary](https://my.oschina.net/primary)

  20. @Bean("firstMongoProperties")

  21. @ConfigurationProperties(prefix = "spring.data.mongodb.first")

  22. public MongoProperties firstMongoProperties() {

  23. return new MongoProperties();

  24. }


  25. @Bean("secondMongoProperties")

  26. @ConfigurationProperties(prefix = "spring.data.mongodb.second")

  27. public MongoProperties secondMongoProperties() {

  28. return new MongoProperties();

  29. }


  30. @Primary

  31. @Bean(value = "firstMongoTemplate")

  32. public MongoTemplate firstMongoTemplate(@Qualifier("firstMongoProperties") MongoProperties mongoProperties) {

  33. return new MongoTemplate(mongoDbFactory(mongoProperties));

  34. }


  35. @Bean(value = "secondMongoTemplate")

  36. public MongoTemplate secondMongoTemplate(@Qualifier("secondMongoProperties") MongoProperties mongoProperties) {

  37. return new MongoTemplate(mongoDbFactory(mongoProperties));

  38. }



  39. private MongoDbFactory mongoDbFactory(MongoProperties mongoProperties) {

  40. ServerAddress serverAddress = new ServerAddress(mongoProperties.getHost(), mongoProperties.getPort());

  41. List<MongoCredential> credentialList = new ArrayList<>();

  42. credentialList.add(MongoCredential.createScramSha1Credential(mongoProperties.getUsername()

  43. , mongoProperties.getDatabase(), mongoProperties.getPassword()));

  44. MongoClient mongoClient = new MongoClient(serverAddress,

  45. credentialList,

  46. new MongoClientOptions.Builder().build());

  47. return new SimpleMongoDbFactory(mongoClient, mongoProperties.getDatabase());

  48. }

  49. }

测试
  1. package com.tcwong.mongodb.controller;


  2. import org.springframework.beans.factory.annotation.Autowired;

  3. import org.springframework.beans.factory.annotation.Qualifier;

  4. import org.springframework.data.mongodb.core.MongoTemplate;

  5. import org.springframework.web.bind.annotation.GetMapping;

  6. import org.springframework.web.bind.annotation.RestController;


  7. import java.util.HashMap;

  8. import java.util.Map;


  9. @RestController

  10. public class MongoTemplateController {


  11. @Autowired

  12. @Qualifier("firstMongoTemplate")

  13. private MongoTemplate firstMongoTemplate;


  14. @Autowired

  15. @Qualifier("secondMongoTemplate")

  16. private MongoTemplate secondMongoTemplate;


  17. @GetMapping("/firstMongoTemplate")

  18. public void firstTemplate() {

  19. Map<Object, Object> map = new HashMap<>();

  20. map.put("数据库", "firstMongoTemplate");

  21. firstMongoTemplate.insert(map, "firstDB");

  22. }


  23. @GetMapping("/secondMongoTemplate")

  24. public void secondTemplate() {

  25. Map<Object, Object> map = new HashMap<>();

  26. map.put("数据库", "secondMongoTemplate");

  27. secondMongoTemplate.insert(map, "secondDB");

  28. }



  29. }

效果

firstDB 数据库

secondDB 数据库

《 完 》


谢谢大家持续关注TC

你们的每一个交流和【在看】都是TC持续更新的动力

我是TC,可以叫我阿七一个才华与美貌于一身的美男子


文章转载自TC 谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论