Die angenommene grundlegende Bauumgebung: SpringMVC, MyBatis, MySQL und Tomcat Spring Transaction Management werden die Nachteile des herkömmlichen globalen Transaktionsmanagements und des lokalen Transaktionsmanagements abgebaut, sodass ein einheitliches Transaktionsmanagementmodell in jeder Umgebung verwendet werden kann und Sie einmal Code schreiben können . Konfigurieren Sie dann verschiedene Transaktionsmanagement -Richtlinien in verschiedenen Umgebungen. Verwendet SpringMVC und MyBatis, es ist einheitlich gekennzeichnet, um den Dienst und den Controller zu deklarieren
Da die Reihenfolge des Ladens von Konfigurationsdateien am Serverstart web.xml ist --- root-context.xml (Konfigurationsdatei von Spring) --- Servlet-context.xml (Konfigurationsdatei von SpringMVC) aufgrund des Root-Context Die .xml -Konfiguration In der Datei wird der Controller zuerst gescannt, aber zu diesem Zeitpunkt wurde der Dienst noch nicht durch Transaktion verbessert. Kapazität), also müssen wir uns auf der root-context.xml befinden.
<!-Scannen Sie die Komponente automatisch, um den Controller unter dem Control zu entfernen. -> <Kontext: Komponent-scan-Basis-Package = "com.sce"> <context: filter type = "Annotation" = "org.springframework.sterotype.contr Ololler" />. > <! .Scan Controller Im Service-Context.xml Wenn Sie den Dienst nicht scannen, lautet die Konfiguration wie folgt:
<!-scannen Sie den gesamten Controller, scannen Sie jedoch nicht den Service-> <Kontext: Komponenten-scan-Basis-Package = "com.scesce"> <context: include-filter type = "Annotation" = "oder. G.springFramework.stereotype .Controller " /> <context: frei-freier Typ =" Annotion "Expression =" org.springFramework.steeotype.Service " /> < /context: Komponente ---! Controller, aber nicht den Dienst scannen--> <Kontext: Component-scan base-package = "com.scence"> <context: include-filter type = "Annotation" = "org.springframework.stereotype = "Org.springframework.sterotype.service" /> < /context: component-scan>Das Folgende kann für die Verwaltung der Anweisung konfiguriert werden. Die Konfiguration lautet wie folgt:
<!-Transaction Manager, verwenden Sie DataSourcetRANSACTIONALE-> <bean id = "txManager"> <Eigenschaft name = "dataSource" ref = "dataSource" /> < /bean> <!-Sprin. Config> <aoP: pointcut id = "fooServicemethods" Exposition = "Ausführung (*com.Sowence.*. = "FooServicemethods"/> </aoP: config> <tx: Ratschläge id = "txadvice" Transaction-Manager = "TxManager"> <tx: Attribute> <methode nam e = "find*" read-iny = "true". /> <tx: method name = "love*" schreibgeschützt = "true"/> <tx: method name = "*" rollback-for = "custOMexception"/> </tx: Attribute> </tx: Rat > <!-Transaktionsmanager, verwenden Sie DataSourcetRANSACTIONAL-> <bean id = "txManager"> <Eigenschaft name = "dataSource" Ref = "DataSource"/> </> Bean> <!-Deklarative Transaktionsverwaltung der Spring-Transaktion-> <AOP: Config> <aoP: pointcut id = "fooServicemethods" Expression = "Execution (*com.sce.*.*.*. "/> </AoP: config> <tx: Ratschläge id =" txadvice "Transaction-Manager =" TxManager "> <tx: attr ibutes> <tx: method name =" find*"schreibgeschützt =" true "/ > <tx: method name = "last*" schreibgeschützt = "true"/> <tx: method name = "*" rollback-for = "custOMexception"/> </tx: Attribute> </tx: Ratschläge>Zu diesem Zeitpunkt wurde meine Konfiguration abgeschlossen, aber nach meinem Test war eines der Objekte, als ich in die MySQL -Datenbanktabelle ging, falsch, und die CustomException -Angelegenheiten kehrten nicht zurück. Die Schritte sind wie folgt: 1. Finden Sie, ob die Deklaration der Deklarations -Transaktionen falsch ist, wenn der Einstiegspunkt falsch ist