Hintergrund
In jüngster Zeit steht das Projekt vor, und es muss ein Datenmigrationsprogramm entwickelt werden. Die Hauptfunktion des Programms besteht darin, die Daten in einer Datenbank abzufragen und nach einer Reihe von Verarbeitung in eine andere Datenbank zu importieren. Berücksichtigung der Bequemlichkeit und Geschwindigkeit der Entwicklung. Natürlich dachte ich daran, es in Frühling und MyBatis zu integrieren. Selbst wenn Sie die automatische Codegenerierung von MyBatis verwenden, kann eine große Entwicklung von Dao -Ebenen sparen.
Die Integrationsgrube
Vorheriges Projekt: Ich hatte schon einmal ein ähnliches Programm, daher habe ich die Konfiguration von Spring und MyBatis Integration direkt verwendet, um sie zu ändern. Die vorherige integrierte Konfiguration lautet wie folgt:
1. In Anbetracht der Konfigurierbarkeit der Datenbank -URL, des Benutzernamens und des Kennworts geben Sie diese Informationen in die Eigenschaftendatei ein. Verwendet in der Federkonfigurationsdatei
<Kontext: Property-Placeholder location = "classPath: config.Properties" />
2. Die integrierte Konfiguration von MyBatis und Feder in der Federkonfigurationsdatei ist so wie diese
<bean id = "
Es gibt kein Problem mit der obigen Konfiguration. Kopieren Sie also einfach die Konfiguration in das neue Projekt
Aktuelles Projekt: Kopieren Sie die Konfiguration des alten Projekts, aber das neue Projekt muss eine Verbindung zu zwei Datenbanken herstellen, sodass natürlich zwei Datenquellen (Aufzeichnung und IM) erforderlich sind, sodass die alte Konfiguration wie folgt geändert wird
1. Die Konfiguration der Verwendung von Eigenschaftendateien bleibt unverändert
2. Da es zuvor nur eine Datenquelle (eine SQLSessionFactory) gab, wurde der <Eigenschaftsname = "SQLSessionFactory" ref = " Weil der Standard -SQLSessionFactory verwendet wird. Aber jetzt gibt es zwei Datenquellen, die sie nicht angeben werden, wird definitiv zu Verwirrung führen. Die Konfiguration wird also wie folgt geändert
<bean id = "record_sqlSessionFactory"> <Eigenschaft name = "dataSource" ref = "record_dataSource" /> < /bean> <bean id = "config1"> <Eigenschaft name = "Basepackage" value = "com.xx.util.rollback.record.dao" /> <Stiefname = " ref = "record_sqlSessionFactory" /> < /bean> <bean id = "im_sqlSessionFactory"> <Eigenschaft name = "dataSource" ref = "im_dataSource" /> < /bean> <bean id = "config2"> <property name = "basepackage" /com.xxx.util.util.im.im.daO. name = "sqlSessionFactory" ref = "im_sqlSessionFactory" /> < /bean>
Das Ergebnis ist, dass beim Ausführen eines neuen Projekts die Eigenschaften wie $ {jdbc.url}, $ {jdbc.name} in der Federkonfigurationsdatei nicht durch die angegebenen Werte in den Eigenschaften ersetzt werden können. Zuerst hatte ich natürlich nicht erwartet, dass es an der Integration von Spring und MyBatis lag, und überprüfte immer wieder, ob die Frühlingskonfigurationsdatei falsch war, ob die Eigenschaftendatei falsch war, ob die Eigenschaftendatei nicht referenziert wurde oder die Eigenschaftendatei nicht in das Klassenpfad -Verzeichnis usw. zusammengefasst wurde. Ich musste mich dem Internet wenden. Endlich die Antwort gefunden
Behobene Methode: Ändern Sie die Konfiguration in Folgendes, das Problem wurde gelöst:
<bean id = "record_sqlSessionFactory"> <Eigenschaft name = "dataSource" ref = "record_dataSource" /> < /bean> <bean id = "config1"> <Eigenschaft name = "Basepackage" value = "com.xx.util.rollback.record.dao" /> <Seigenschaftsname = " value = "record_sqlSessionFactory" /> < /bean> <bean id = "im_sqlSessionFactory"> <Eigenschaft name = "dataSource" ref = "im_dataSource" /> < /bean> <bean id = "config2"> <property name = "basepackage" com.xx.util.util.im.im.daO. Name = "
Es soll die SQLSessionFactory -Eigenschaft in SQLSessionFactoryBeanname ändern. Natürlich muss REF ebenfalls auf Wert geändert werden. Weil die SQLSessionFactoryBeanname -Eigenschaft ein String -Typ ist
Grund
Bei Verwendung von org.mybatis.spring.mapper.MapperscannerConfiger für automatisches Scannen im Frühjahr kann der PropertyPlaceHolpleConfiger ungültig sein, dh Ausdrücke wie $ {jdbc.username} können die Inhalte in den Eigenschaften nicht in den Eigenschaften einbeziehen.
Dies liegt daran, dass sich der MapperscannerConiger tatsächlich in der Stufe zur Definition des Parse -Ladungsbohnens befindet. Wenn Sie die SQLSessionFactory zu diesem Zeitpunkt festlegen, werden einige Klassen im Voraus initialisiert. Zu diesem Zeitpunkt hatte der PropertyPlaceHolpleConFigurer keine Zeit, die Variablen in der Definition zu ersetzen, was dazu führte, dass der Ausdruck als Zeichenfolge kopiert wurde. Wenn die SQLSessionFactory -Eigenschaft jedoch nicht festgelegt ist, muss sichergestellt werden, dass der Sitzungsname im Frühjahr SQLSessionFactory sein muss, andernfalls wird sie nicht automatisch injiziert.
Das obige sind die Fallstricke von Frühlings, die MyBatis in der Verwendung von <context: Eigentumsinhaber>, die ich Ihnen vorgestellt habe, integriert. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!