Maison >Java >javaDidacticiel >Analyse des exemples d'utilisation de plusieurs sources de données Spring MVC Mybatis

Analyse des exemples d'utilisation de plusieurs sources de données Spring MVC Mybatis

高洛峰
高洛峰original
2017-01-24 10:28:231721parcourir

Le projet doit obtenir des données d'autres sites Web. Comme il s'agit d'une exigence temporaire, je ne m'attendais pas à avoir besoin de plusieurs sources de données lorsque j'ai démarré le projet.

J'ai donc cherché sur Baidu et j'ai découvert que c'était le cas. il suffit de modifier le fichier Spring applicationContext.xml. Et l'écriture de trois classes d'outils peut obtenir une implémentation parfaite

applicationContext.xml

<!-- 多数据源配置 -->
 <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="" />
 </bean>
 <bean id="ds2" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="" />
  <property name="url" value="" />
  <property name="username" value="" />
  <property name="password" value="" />
 </bean>
 <!-- 动态配置数据源 -->
 <bean id="dataSource" class="com.test.utils.DynamicDataSource">//这里是你项目里DynamicDataSource.java的路径
  <property name="targetDataSources">
   <map key-type="java.lang.String">
    <entry value-ref="ds_admin" key="ds1"></entry>
    <entry value-ref="ds_partner" key="ds2"></entry>
   </map>
  </property>
  <!-- 默认使用ds1的数据源 -->
  <property name="defaultTargetDataSource" ref="ds_admin"></property> 
 </bean>

DataSourceContextHolder.java

public class DataSourceContextHolder {
 private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
 public static void setDbType(String dbType) {
  contextHolder.set(dbType);
 }
 public static String getDbType() {
  return ((String) contextHolder.get());
 }
 public static void clearDbType() {
  contextHolder.remove();
 }
}

DataSourceType.java (définir des variables statiques)

public class DataSourceType {
 // 默认数据库
 public static final String SOURCE_ADMIN = "ds1";
 // 第二个数据库,在applicationContext.xml里的id
 public static final String SOURCE_PARTNER = "ds2";
}

Le suivant est la clé DynamicDataSource.java qui hérite de la méthode abstraite détermineCurrentLookupKey dans AbstractRoutingDataSource et est implémenté au cœur de l'itinéraire de la source de données. Remplacez cette méthode ici.

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
 @Override
 protected Object determineCurrentLookupKey() {
  return DataSourceContextHolder.getDbType();
 }
}

Ce qui précède est l'analyse des exemples d'utilisation de plusieurs sources de données Spring MVC Mybatis présentés par l'éditeur. J'espère que cela vous sera utile si vous avez des questions. , merci de nous le faire savoir, je laisserai un message et l'éditeur vous répondra à temps. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !

Pour plus d'articles liés à l'analyse des cas d'utilisation des multiples sources de données Spring MVC Mybatis, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn