No gerenciamento de transações de inicialização da primavera, implemente o manutenção da plataforma auto-interface.
interface pública PlatformTransactionManager {org.springframework.transaction.TransactionStatus getTransaction (org.springframework.transaction.transactionDefinition transactionDefinition) lança org.springframework.transaction.transactionException; Void Commit (org.springframework.transaction.transactionStatus transactionStatus) lança org.springframework.transaction.transactionException; Rollback void (org.springframework.transaction.transactionStatus transactionStatus) lança org.springframework.transaction.transactionException;}Quando usamos a dependência do Spring-Boot-Starter-JDBC, a estrutura injetará automaticamente o DataSourCetransactionManager por padrão. Portanto, não precisamos de nenhuma configuração adicional para usar a anotação @Transactional para uso da transação.
JDBC Transaction Manager
Em serviço, o método anotado por @Transaction suportará transações. Se a anotação estiver em uma classe, todos os métodos de todas as transações de suporte de classe por padrão.
Situação de gerente de múltiplas transações
1: Você pode implementar a interface TransactionManagementConfigurer, e o valor de retorno do método dentro é o gerenciador de transações padrão.
2: Você pode definir o valor no método de execução específico
Se houver várias instâncias de manager de plataforma de plataforma no contêiner de mola e a interface transactionManagementConfigurer não será implementada para especificar o valor padrão, quando usamos a anotação @Transaction no método, devemos especificá -lo com valor. Se não for especificado, uma exceção será lançada.
//@EnableTransactionManagement // Ligue o gerenciamento de transações de anotação, que é equivalente a <tx: anotação-driven />@springbootapplicationpublic classe ProfiledemoApplication implementa transactionManagementConfigurer {@Resource (name "" txManager2 ") PrivateTransactionManager txman2; // Criar manualmente o Gerenciador de transações 1 A estrutura do DataSource será injetada automaticamente // no contêiner de mola, anotarmos manualmente @Bean serão carregados primeiro e a estrutura não reinalizará novamente outras classes de implementação do gerente da plataforma. @Bean (name = "txManager1") public PlatformTransactionManager txManager (DataSource DataSource) {retorna novos dadosOrCetRansactionManager (DataSource); } // Crie transaçãoManager 2 @Bean (name = "txManager2") public PlatformTransactionManager TXManager2 (EntityManagerFactory Factory) {return New JPatransactionManager (Factory); } // Implementar o método de transação de interface managementConfigurer cujo valor de retorno representa o gerenciador de transações usado por padrão se você tiver vários gerentes de transação @Override public plataformTransactionManager anoTationDriveRentRANSActionManager () {return txManager2; } public static void main (string [] args) {springapplication.run (ProfiledemoApplication.class, args); }}Implementação específica
@ComponentPublic Class devSendMessage implementa sendMessage {// Use o valor para especificar qual gerenciador de transações use @Transactional (value = "txManager1") @Override public void send () {System.out.println (">>>>>>>>>>> dev send () <<ida. send2 (); } @Transaction Public void send2 () {System.out.println (">>>>>>>>>>>> dev send2 () <<<<<<<<"); }}Nível de isolamento
public enum isolation {default (transactionDefinition.isolation_default), read_uncommited (transactionDefinition.isolation_read_uncommitd), read_Commited (transactionDefinition.isolation_read_committ), repetida_read (transactionDefinition.isolation_preseatable_Commitd), repetida_read () Serializável (transactionDefinition.isolation_serializable); Valor Int final privado; Isolamento (int valor) {this.value = value; } public int value () {return this.value; }} Especifique o método: definido usando a propriedade de isolamento, por exemplo:
@Transactional (isolation = isolation.default)
Comportamento de comunicação
O chamado comportamento de propagação da transação refere-se a isso, se um contexto de transação já existir antes do início da transação atual, existem várias opções que podem especificar o comportamento de execução de um método transacional.
Podemos ver que a classe de enumeração Org.SpringFramework.Transaction.annotation.propagation define 6 valores de enumeração que representam o comportamento de propagação:
propagação pública enum {requerir (transactionDefinition.propagation_required), suporta (transactionDefinition.propagation_supports), obrigatório (transactionDefinition.propagation_mandatory), requer_new (transactionDefinition.propagation_res_new), Não_supportted (transactionDefinition.propagation_not_supported), nunca (transactionDefinition.propagation_never), aninhado (transactionDefinition.propagation_nested); Valor Int final privado; Propagação (int vale) {this.value = value; } public int value () {return this.value; }}Necessário: Se uma transação estiver presente atualmente, participe da transação; Se atualmente não houver transação, crie uma nova transação. valor padrão.
Suporta: se uma transação estiver presente atualmente, participe da transação; Se atualmente não houver transação, continue sendo executado de maneira não transacional.
Obrigatório: se uma transação estiver presente atualmente, participe da transação; Se atualmente não houver transação, uma exceção será lançada. (Forçado a colocá -lo na transação)
Requer_new: cria uma nova transação e, se a transação existir atualmente, a transação atual será suspensa. (Os registros de impressão são frequentemente usados. Mesmo que a reversão anterior seja revertida, a transação será executada e a mensagem de erro será gravada)
Não_supportado: é executado de maneira não transacional. Se atualmente existir uma transação, a transação atual será suspensa.
Nunca: é executado de maneira não transacional, lança uma exceção se existir atualmente uma transação.
Atualmente, se existir uma transação, uma transação será criada para ser executada como uma transação aninhada da transação atual; Se não houver transação atualmente, o valor será equivalente ao necessário.
Especifique o método: definido usando a propriedade de propagação, por exemplo:
@Transactional (propagação = propagação.Required)
Transação não reversão
Role de volta apenas se ocorrer uma hora de execução não capturada
A exceção lançada por captura será bem -sucedida quando as duas inserções
@Override @Transaction Public void InstandInssert (equipe da equipe) {Staffdao.insert (Staff); tente {int i = 1/0; } catch (Exceção e) {e.printStackTrace (); } Staffdao.insert (Staff); }Adicionado à declaração de captura do método da camada de serviço: transactionAspectSupport.CurrentTransactionStatus (). Setrollbackonly (); Declaração, reversão manual não inserirá dados
@Override @Transaction Public void InstandInssert (equipe da equipe) lança exceção {tente {Staffdao.insert (Staff); int i = 1/0; Staffdao.insert (Staff); } catch (Exceção e) {transactionAspectSupport.CurrentTransactionStatus (). Setrollbackonly (); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.