Spring MVC Mybatis多数据源的使用实例解析
项目需要从其他网站获取数据,因为是临时加的需求,在开始项目时没想到需要多数据源
于是百度了一下,发现只需要改动一下Spring的applicationContext.xml文件和编写三个工具类就可以完美实现
applicationContext.xml
<!--多数据源配置-->
<beanid="ds1"class="org.apache.commons.dbcp.BasicDataSource">
<propertyname="driverClassName"value="${jdbc.driverClassName}"/>
<propertyname="url"value="${jdbc.url}"/>
<propertyname="username"value="${jdbc.username}"/>
<propertyname="password"value=""/>
</bean>
<beanid="ds2"class="org.apache.commons.dbcp.BasicDataSource">
<propertyname="driverClassName"value=""/>
<propertyname="url"value=""/>
<propertyname="username"value=""/>
<propertyname="password"value=""/>
</bean>
<!--动态配置数据源-->
<beanid="dataSource"class="com.test.utils.DynamicDataSource">//这里是你项目里DynamicDataSource.java的路径
<propertyname="targetDataSources">
<mapkey-type="java.lang.String">
<entryvalue-ref="ds_admin"key="ds1"></entry>
<entryvalue-ref="ds_partner"key="ds2"></entry>
</map>
</property>
<!--默认使用ds1的数据源-->
<propertyname="defaultTargetDataSource"ref="ds_admin"></property>
</bean>
DataSourceContextHolder.java
publicclassDataSourceContextHolder{
privatestaticfinalThreadLocal<String>contextHolder=newThreadLocal<String>();
publicstaticvoidsetDbType(StringdbType){
contextHolder.set(dbType);
}
publicstaticStringgetDbType(){
return((String)contextHolder.get());
}
publicstaticvoidclearDbType(){
contextHolder.remove();
}
}
DataSourceType.java(设置静态变量)
publicclassDataSourceType{
//默认数据库
publicstaticfinalStringSOURCE_ADMIN="ds1";
//第二个数据库,在applicationContext.xml里的id
publicstaticfinalStringSOURCE_PARTNER="ds2";
}
接下来这个是关键DynamicDataSource.java它继承了AbstractRoutingDataSource中的抽象方法determineCurrentLookupKey是实现数据源的route的核心.这里对该方法进行Override。
importorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
publicclassDynamicDataSourceextendsAbstractRoutingDataSource{
@Override
protectedObjectdetermineCurrentLookupKey(){
returnDataSourceContextHolder.getDbType();
}
}
以上所述是小编给大家介绍的SpringMVCMybatis多数据源的使用实例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!