mongo多数据源教程 mongoTemplate 多数据源

参考链接
感谢大佬们的分享

第一步 添加mongo依赖

版本号统一在父pom管理

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

多数据源需要使用配置注入 导入依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

这里主要是使用 @ConfigurationProperties 这个注解 不然会报错

第二步 配置yml

普通的单数据源的yml配置我们是这样的

  data:
    mongodb:
      uri: mongodb://账号:密码@ip:端口号/数据库名

多数据源我们就要在这里做些文章了

spring:
  data:
    mongodb:
      自定义参数1:
        uri: mongodb://账号:密码@ip:端口号/数据库名1
      自定义参数2:
        uri: mongodb://账号:密码@ip:端口号/数据库名2

这里的自定义参数 我们后面使用

第三步通过工厂模式

装配bean方式将yml我们的配置文件的多数据源进行使用

创建mongo数据源工厂
注意事项 一定不要忘写@data注解 不然运行会报错

@Data
public abstract class AbstractMongoConfig {


    private String uri;

    /*
     * Method that creates MongoDbFactory Common to both of the MongoDb
     * connections
     */
    public MongoDbFactory mongoDbFactory() throws Exception {

        return new SimpleMongoDbFactory(new MongoClientURI(uri));
    }

    /*
     * Factory method to create the MongoTemplate
     */
    abstract public MongoTemplate getMongoTemplate() throws Exception;

}

然后创建不同数据库的生成工厂

@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.自定义参数1")
@Component
public class CommunityMongoConfig extends AbstractMongoConfig {


	@Primary
    @Bean(name = "template1")
    @Override
    public MongoTemplate getMongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }

}

这里我们在上面引用yml配置的工厂 下面自定义一个参数 在注入bean的时候进行区分调用的是哪一个数据库

重点 这里还有一个@Primary 注解 多个数据库工厂只有一个这个注解 表示默认使用的数据库

@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.自定义参数2")
@Component
public class CommunityMongoConfig extends AbstractMongoConfig {

     @Bean(name = "template1")
    @Override
    public MongoTemplate getMongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }

}

**

最后 使用

**

@Service
@Slf4j
public class OrderManageServiceImpl implements IOrderManageSerive {

	@Autowired
	@Qualifier("template1")
	private MongoTemplate mongoTemplate;

	@Autowired
	@Qualifier("template2")
	private MongoTemplate communityMongoTemplate;
}

参数一定要对应起来,假使使用mongoRepository 我现在只研究可以这样使用默认的 多了 没研究出来。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章