A veces, se conectan varias bases de datos en un proyecto, y múltiples fuentes de datos deben configurarse en Spring. He encontrado este problema recientemente. Dado que mi proyecto se basó en General DAO antes, hay problemas constantes durante la configuración, y este método entra en conflicto con los archivos de recursos. Si escanea el archivo de asignación, el nombre del frijol de SQLSessionFactory debe ser SQLSessionFactory. No puede leer SQLSessionFactory2 u otros nombres. La solución final es la siguiente:
1. Agregue la siguiente clase MultipledataSource.java al proyecto
paquete com.etoak.util; importar org.springframework.jdbc.dataSource.lookup.AbstracTroutingDataSource; MultipledataSource de clase pública extiende AbstrutingDataSource {private static final threadlocal <string> dataSourceKey = new InheritableThreadLocal <String> (); public static void setDataSourceKey (String DataSource) {DataSourceKey.set (DataSource); } @Override Objeto protegido DeterminadoCurrentLlookUpkey () {// TODO Método Generado automático STUB return dataSourceKey.get (); }} El archivo de configuración de Spring es el siguiente:
<Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: context = "http://www.springframework.org/schema/context" xmls: p = "http://www.springframework.org/schema/sns" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/contextExt http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.2sd "> <context: context: component-scan-base-package =" com "/> <mvc: annotation-driven/>> <contextion-tupeSholeLer- Place- Place- Lugar ubicación = "classpath: db.properties"/> <bean id = "ds1" p: conductClassName = "$ {mysql.driver}" p: url = "$ {mysql.url}" p: username = "$ {mysql.useName}" P: contraseña = "$ {mysql.passworthworthword}"/"ds2" " P: DriverClassName = "$ {mysql2.driver}" p: url = "$ {mysql2.Url}" p: username = "$ {mysql2.username}" p: contraseña = "$ {mysql2.password}"/> <bean id = "multipledataSource"> <name de propiedad = "predeterminado de valor predeterminado" ref = "DS1"/> <Property Name = "TargetDataSources"> <Map> <Entrada Key = "DS1" Valor-REF = "DS1"/> <Entrada Key = "DS2" Value-Ref = "DS2"/> </sports> </bean> <bean id = "sqlSessionFactory" P: datASOURCE-Rf = "MultiplLedAtatAtataTateArce" p: mApperLocations = "classpath: com/eToak/dao/*-mApper.xml"/> <Bean> <Bean> <Property Name = "BasePackage" Value = "com.etoak.dao"/> <Property Name = "Markerinterface" Value = "com.etoak.dao.basedAoo"/> </ Beans> </beans> La clase de prueba es la siguiente:
paquete com.etoak.test; importar org.springframework.context.applicationContext; importar org.springframework.context.support.filesystemxmlaPplicationContext; import com.etoak.dao.productdaoif; import com.etoak.util.multipledataSource; Prueba de clase pública {public static void main (string [] args) {applicationContext ac = new FilesystemXMLApPlicationContext ("WebContent/Web-Inf/Etoak-Servlet.xml"); ProductDaoif proDAO = (ProductDaoif) ac.getBean (productdaoif.class); MultipledataSource.setDataSourceKey ("DS1"); int count1 = proDAO.SelectProductCount (); MultipledataSource.setDataSourceKey ("ds2"); int count2 = proDAO.SelectProductCount (); System.out.println (count1); System.out.println (count2); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.