关于mongodb多数据源的设计

根据上一篇的MongoDB项目搭建基础上,新增需求添加多数据源选择,在此记录一下:

其实变动不是很大,只要是修改一下mongodb-context.xml的内容即可。在这里补充一点,之前的配置文件里面关于连接数据库的部分代码,后来在网上查资料发现 mongo:mongo 标签和 mongo:mongo-client都可以作为连接数据库来使用,具体区别网上有答案,请小伙伴们自行百度吧。这里贴上最新的代码:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xmlns:mongo="http://www.springframework.org/schema/data/mongo"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans   
							http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
							http://www.springframework.org/schema/data/mongo  
            				http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
            				http://www.springframework.org/schema/context  
							http://www.springframework.org/schema/context/spring-context-3.0.xsd ">  
    <!-- 加载mongodb的属性配置文件 -->  
    <context:property-placeholder location="classpath*:mongo_config.properties"/>  
    
    <!-- GM数据库 start-->
    <mongo:mongo-client host="127.0.0.1" port="27017" credentials="用户:密码@数据库" id="dataSource_games_gm">
       <mongo:client-options write-concern="SAFE"/>    
    </mongo:mongo-client>  
    <mongo:db-factory  id="mongoDbFactory" dbname="local" mongo-ref="dataSource_games_gm" />
  
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
        <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
    </bean>  
    <!-- GM数据库 end-->
    
    <!-- game数据库 start-->
    <mongo:mongo-client host="127.0.0.1" port="27017" credentials="用户:密码@数据库" id="dataSource_games_game">
       <mongo:client-options write-concern="SAFE"/>
    </mongo:mongo-client>  
    <mongo:db-factory  id="mongoDbFactoryData" dbname="game" mongo-ref="dataSource_games_game" />
  
    <bean id="mongoTemplateData" class="org.springframework.data.mongodb.core.MongoTemplate">  
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactoryData"/>
        <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
    </bean> 
    <!-- game数据库 end-->
    
    <!-- 去掉MongoDB数据中的_class属性的方法 -->
    <bean id="mappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
    <bean id="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
        <constructor-arg name="typeKey">
            <null />
        </constructor-arg>
    </bean>
    <bean id="mappingMongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
        <constructor-arg name="mappingContext" ref="mappingContext" />
        <property name="typeMapper" ref="defaultMongoTypeMapper" />
    </bean>
    
    <!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->  
    <mongo:mapping-converter base-package="com.games.admin.model"/>  
  
    <!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->  
    <mongo:repositories base-package="com.games.admin.dao"/>  
    
    <!-- 自定义注解 -->
    <bean class="com.games.admin.utils.SaveMongoEventListener"></bean>
    
    <!-- 项目启动加载工具类 -->
    <bean class="com.games.admin.interceptor.SpringLoadCompleteInterceptor" />
	<bean id="SpringContextUtil" class="com.games.admin.interceptor.SpringContextUtil"/>
</beans>  
切换数据源工具类:

@Service
public class ChooseMongoTemplateDaoImpl implements ChooseMongoTemplateDao{
	
	//加载数据源
	@Resource
	public MongoTemplate mongoTemplate;

	@Resource
	public MongoTemplate mongoTemplateData;
	
	/**
	 * 根据地区ID选择数据源
	 */
	public MongoTemplate chooseMongoTemplate(int areaId){
		
		if(areaId == 403){
			return mongoTemplateData;
		}else{
			return mongoTemplate;
		}
	}
}
这里呢,我写的是一个借口,通过一个字段来判断调用哪个 数据源 对象。这里需要特别注意的是注解   @resource,如何使用小伙伴们自行百度吧。
好了,一个简单的切换数据源就完成了。如果有更好的办法欢迎留言!




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值