El entorno básico de construcción adoptado: SpringMVC, MyBatis, MySQL, Tomcat Spring Transaction Management desglosa las desventajas de la gestión tradicional de transacciones globales y la gestión de transacciones locales, de modo que se pueda usar un modelo de gestión de transacciones unificadas en cualquier entorno, y puede escribir un código una vez . Luego, configurar diferentes políticas de gestión de transacciones de su código en diferentes entornos. Utiliza SpringMVC y MyBatis, está etiquetado de manera uniforme para declarar el servicio y el controlador
Dado que el orden de cargar archivos de configuración en el servidor inicia es Web.xml --- root-Context.xml (archivo de configuración de Spring) --- Servlet-Context.xml (archivo de configuración de SpringMVC), debido al contexto raíz Configuración .xml En el archivo, el controlador se escaneará primero, pero en este momento, el servicio aún no ha sido mejorado por la transacción. Capacidad), por lo que debemos estar en Root-Context.xml No Scan Controller, la configuración es la siguiente:
< -> <context: componente-escan-scan-package = "com.sence"> <context: excluir-filter type = "anotation" = "org.springframework.sterotype.contr oller" />. > <!-Escanear automáticamente el componente, aquí es eliminar el controlador en Controlr. -> <context: component-scan base-pakage = "com.sence"> <context: exclute-filter type = "anotation" = "org.springframework.sterotype.contr oller" /> < /context: component-scan "El controlador de escaneo en el servicio-Context.xml Al no escanear el servicio, la configuración es la siguiente:
<!-Escanee todo el controlador pero no escanee el servicio-> <context: componente-scan base-paquete = "com.sence"> <context: include-filter type = "anotación" = "o. .Controller " /> <context: excluye libre tipo =" annotion "expresion =" org.springframework.steeotype.service " /> < /context: componente ---! Controlador pero no escanear el servicio-> <context: Componente-Scan Base-Package = "com.sence"> <context: include-filter type = "annotation" = "org.springframework.stereotype.contro ller" /> <context: excluir-filter type = "anotación". = "Org.springframework.sterotype.service" /> < /context: component-scan>Lo siguiente se puede configurar para la administración de la declaración, la configuración es la siguiente:
<!-Manager de transacciones, use DataSourCetransactionAger-> <bean id = "txManager"> <propiedad name = "dataSource" ref = "dataSource" /> </ bean> <!-sprin. Config> <aop: pointcut id = "fooserviceMethods" exposition = "ejecución (*com.sence.*.*. Impl.*.*(..))" <aop: asesor adsors-ref = "txadvice" punto-ref = "FooserviceMethods"/> </aop: config> <tx: consejo id = "txadvice" transaccion-ganager = "txmanager"> <tx: atributes> <método nam e = "find*" solo lectura = "verdadero" /> <tx: método name = "Love*" Read-Only = "True"/> <tx: Method Name = "*" Rollback-For = "CustomException"/> </tx: Atributes> </tx: consejo > <!-Manager de transacciones, use DataSourCetransactionAger-> <bean id = "txManager"> <propiedad name = "dataSource" ref = "dataSource"/> </> bean> <!-Gestión de transacciones declarativas de resorte-> <aop: Config> <aop: pointCut id = "FooserviceMethods" Expression = "Ejecution (*com.sence.*.*.*.*(..))" AOP: Advisor ASCESION-REF = "TXADVICE" Pointcut-ref = "FooserviceMethods "/> </Aop: config> <tx: consejo id =" txadvice "transaccion-ganager =" txManager "> <tx: attr ibutes> <tx: método name =" find*"read-only =" true "/ > <tx: método name = "Load*" Read-Only = "True"/> <tx: Method name = "*" Rollback-For = "CustomException"/> </tx: Attributes> </tx: consejo>En este punto, mi configuración se completó, pero después de mi prueba, cuando fui a la tabla de la base de datos MySQL en lotes, uno de los objetos estaba equivocado y los asuntos de CustomException no volvieron. , los pasos son los siguientes: 1. Encuentre si la declaración de las transacciones de tipo de declaración es incorrecta, si el punto de entrada es incorrecto