Parfois, plusieurs bases de données sont connectées dans un projet, et plusieurs sources de données doivent être configurées au printemps. J'ai rencontré ce problème récemment. Étant donné que mon projet était basé sur General DAO auparavant, il y a des problèmes constants pendant la configuration et cette méthode entre en conflit avec les fichiers de ressources. Si vous analysez le fichier de mappage, le nom de bean du SQLSessionFactory doit être SQLSessionFactory. Il ne peut pas lire SQLSessionFactory2 ou d'autres noms. La solution finale est la suivante:
1. Ajouter la classe suivante MultipledataSource.java au projet
Package com.etoak.util; import org.springframework.jdbc.datasource.lookup.abstractroutingDataSource; La classe publique MultipledataSource étend AbstratTroutingDataSource {private static final threadlocal <string> dataSourceKey = new hheRitableThreadLocal <string> (); public static void setDataSourceKey (String dataSource) {dataSourceKey.set (dataSource); } @Override Protected Object déterminéCurrentLookUpKey () {// TODO Méthode générée automatique Stub return dataSourceKey.get (); }} Le fichier de configuration de ressort est le suivant:
<Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: context = "http://www.springframework.org/schema/context" xmlns: p = "http://www.springframeworkwork.org/schema" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/contex http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd "> <context: composant-scan base-package =" com "/> <mvc: annotation-Driven /> <contexte: Propertyholder location = "classpath: db.properties" /> <bean id = "ds1" p: driverclassname = "$ {mysql.driver}" p: url = "$ {mysql.url}" p: username = "$ {mysql.usename}" p: passway = "$ {mysql.password}" p: driverclassname = "$ {mysql2.driver}" p: url = "$ {mysql2.url}" p: username = "$ {mysql2.username}" p: mot de passe = "$ {mysql2.password}" /> <bean id = "multipledatasource"> <propriété nom Ref = "DS1" /> <propriété name = "TargetDataSources"> <map> <entrée key = "ds1" value-ref = "ds1" /> <entrée key = "ds2" value-ref = "ds2" /> </ map> </ propriété> </ bean> <bean id = "sqlSessionFactory1" p: dataSource-ref = "multiplentata" P: MAPPERLOCATIONS = "CLASSPATH: com / Etoak / Dao / * - MAPPER.xml" /> <ank> <any> <propriété name = "Basepackage" value = "com.etoak.dao" /> <propriété name = "Marketerface" La classe de test est la suivante:
package com.etoak.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.filesystemxmlapplicationContext; import com.etoak.dao.productdaoif; import com.etoak.util.MultipledataSource; Public Class Test {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); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.