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多数据源的使用实例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!