บางครั้งฐานข้อมูลหลายฐานเชื่อมต่อในโครงการและแหล่งข้อมูลหลายแหล่งต้องได้รับการกำหนดค่าในฤดูใบไม้ผลิ ฉันได้พบปัญหานี้เมื่อเร็ว ๆ นี้ เนื่องจากโครงการของฉันขึ้นอยู่กับ General DAO มาก่อนจึงมีปัญหาอย่างต่อเนื่องในระหว่างการกำหนดค่าและวิธีการนี้ขัดแย้งกับไฟล์ทรัพยากร หากคุณสแกนไฟล์การแมปชื่อถั่วของ SQLSessionFactory จะต้องเป็น SQLSessionFactory ไม่สามารถอ่าน SQLSessionFactory2 หรือชื่ออื่น ๆ ได้ ทางออกสุดท้ายมีดังนี้:
1. เพิ่มคลาสต่อไปนี้ multipleDataSource.java ลงในโครงการ
แพ็คเกจ com.etoak.util; นำเข้า org.springframework.jdbc.datasource.lookup.abstractroutingDatasource; คลาสสาธารณะ multipleDataSource ขยาย abstractroutingDataSource {ส่วนตัวคงที่ threadLocal <String> dataSourceKey = ใหม่ MandleItableThreatHreocal <String> (); โมฆะคงที่สาธารณะ setDataSourceKey (สตริง DataSource) {dataSourceKey.set (DataSource); } @Override วัตถุที่ได้รับการป้องกันที่ได้รับการพิจารณาว่า currentLookupkey () {// todo วิธีการที่สร้างขึ้นอัตโนมัติ stub return dataSourceKey.get (); - ไฟล์การกำหนดค่าสปริงมีดังนี้:
<ถั่ว xmlns = "http://www.springframework.org/schema/beans" xmlns: บริบท = "http://www.springframework.org/schema/contex 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/MVC/SPRING-MVC-3.2.XSD "> บริบท: Component-Scan Base-Package =" Com "/>> location = "classpath: db.properties"/> <bean id = "ds1" p: driverclassname = "$ {mysql.driver}" p: url = "$ {mysql.url}" p: username = "$ {mysql.username" p: driverclassName = "$ {mysql2.driver}" p: url = "$ {mysql2.url}" p: username = "$ {mysql2.username}" password = "$ {mysql2.password}"/> ref = "ds1"/> <property name = "targetDataSources"> <per> <entry key = "ds1" value-ref = "ds1"/> <entry key = "ds2" value-ref = "ds2"/> </map> P: mapperlocations = "classpath: com/etoak/dao/*-mapper.xml"/> <bean> <bean> <property name = "basepackage" value = "com.etoak.dao"/> <property name = "markerinterface" value = "com.etoak.dao.dao.basedao คลาสทดสอบมีดังนี้:
แพ็คเกจ com.etoak.test; นำเข้า org.springframework.context.applicationContext; นำเข้า org.springframework.context.support.filesystemxmlapplicationContext; นำเข้า com.etoak.dao.productdaoif; นำเข้า com.etoak.util.multipleDataSource; การทดสอบคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {applicationcontext ac = ใหม่ 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); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น