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!