Heim  >  Artikel  >  Java  >  Analyse von Anwendungsbeispielen für mehrere Datenquellen von Spring MVC Mybatis

Analyse von Anwendungsbeispielen für mehrere Datenquellen von Spring MVC Mybatis

高洛峰
高洛峰Original
2017-01-24 10:28:231645Durchsuche

Da es sich um eine vorübergehende Anforderung handelt, habe ich zu Beginn des Projekts nicht damit gerechnet, dass ich mehrere Datenquellen benötigen würde.

Also habe ich auf Baidu gesucht und festgestellt, dass dies der Fall ist Sie müssen nur die Spring applicationContext.xml-Datei ändern und durch das Schreiben von drei Toolklassen eine perfekte Implementierung erreichen

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 (statische Variablen festlegen)

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

Der nächste ist der Schlüssel DynamicDataSource.java Dies erbt die abstrakte Methode „determineCurrentLookupKey“ in „AbstractRoutingDataSource“ und ist der Kern der Route der Datenquelle. Überschreiben Sie diese Methode hier.

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

Das Obige ist die Analyse der vom Herausgeber vorgestellten Anwendungsbeispiele für mehrere Datenquellen von Spring MVC. Ich hoffe, dass es Ihnen hilfreich sein wird Bitte geben Sie uns eine Nachricht. Der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der chinesischen PHP-Website bedanken!

Weitere Artikel zur Anwendungsfallanalyse mehrerer Datenquellen von Spring MVC Mybatis finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn