O ambiente básico de construção adotado: Springmvc, Mybatis, MySQL, Tomcat Spring Transaction Management divide as desvantagens do gerenciamento tradicional de transações globais e do gerenciamento de transações locais, para que um modelo de gerenciamento de transações unificado possa ser usado em qualquer ambiente e você pode escrever um código uma vez . Usa Springmvc e Mybatis, é uniformemente rotulado para declarar o serviço e o controlador
Como o pedido de carregamento de arquivos de configuração no servidor é iniciado é web.xml --- root-context.xml (arquivo de configuração da mola) --- servlet-context.xml (arquivo de configuração do springmvc), devido ao root-context .xml Configuração no arquivo, o controlador será digitalizado primeiro, mas neste momento o serviço ainda não foi aprimorado pela transação. Capacidade), por isso devemos estar no ROOT-CONTEXT.xml não digitalizando o controlador, a configuração é a seguinte:
<!-Digitalizar automaticamente o componente, aqui está para remover o controlador abaixo do controlador. -> <Contexto: Componente-Scan-Package = "com.sence"> <Contexto: exclude filter type = "anotação" = "org.springframework.sterotype.contr oller" />. > <!-Digitalizar automaticamente o componente, aqui está para remover o controlador em Controlr. -> <Contexto: Componente-Scan Base-Package = "com.sence"> <Contexto: exclude filter type = "anotação" = "org.springframework.sterotype.contr olller" /> < /context: component-scan "Digitam o controlador no serviço-context.xml, enquanto não estiver digitalizando o serviço, a configuração é a seguinte:
<!-Digitalize todos os controladores, mas não digitalize o serviço-> <Contexto: componente-Scan Base-Package = "com.sence"> <Contexto: incluir filtro tipo = "anotação" = "ou. G.SpringFramework.tereotype .Controller " /> <Contexto: exclude-free) Componente-Scan Base-Package = "com.sence"> <Contexto: Incluir-Filter Type = "Anotation" = "Org.springframework.tereotype.contro ller" /> <Contexto: exclude-filter Type = "Anotação" = "Org.springframework.sterotype.service" /> < /context: component-scan>O seguinte pode ser configurado para o gerenciamento da declaração, a configuração é a seguinte:
<!-Gerenciador de transações, use DataSourCetransactionager-> <bean id = "txManager"> <names name = "DataSource" ref = "DataSource" /> </siche Bean> <!-Sprin. Config> <AOP: Pointcut id = "fooservicemethods" Exposition = "Execution (*com.sence.*.*. Impl. = "Fooservicemethods"/> </aOP: config> <tx: conselhos id = "txadvice" transação-manager = "txManager"> <tx: atributes> <método nam e = "encontre*" leia- apenas "true" /> <tx: método name = "love*" leitura somente = "true"/> <tx: name do método = "*" rollback-for = "customexception"/> </tx: atributes> </tx: conselhos > <!-Gerenciador de transações, use DataSourCetransactionager-> <bean id = "txManager"> <propriedade name = "dataSource" ref = "DataSource"/> </> bean> <!-Gerenciamento de transações declarativas da primavera-> <AOP: Config> <AOP: Pointcut id = "fooservicemethods" Expression = "Execution (*com.sence. "/> </AOP: config> <tx: conselhos id =" txadvice "transação-manager =" txManager "> <tx: att ibutes> <tx: name do método =" find*"read-ly =" true "/ > <TX: Método Nome = "Load*" Read -ly = "True"/> <Tx: Método Nome = "*" Rollback-for = "Customexception"/> </tx: Atributes> </tx: Conselhos>Nesse ponto, minha configuração foi concluída, mas após o meu teste, quando fui à tabela de banco de dados MySQL em lotes, um dos objetos estava errado e os assuntos de customexcepção não retornaram. , as etapas são as seguintes: 1. Descubra se a declaração das transações do tipo declaração está errada, se o ponto de entrada estiver errado