Heim >Java >javaLernprogramm >So verwenden Sie Java @Transactional, um Rollback-Bedingungen anzugeben

So verwenden Sie Java @Transactional, um Rollback-Bedingungen anzugeben

WBOY
WBOYnach vorne
2023-04-20 10:04:111440Durchsuche

Ausnahmeklassifizierung

So verwenden Sie Java @Transactional, um Rollback-Bedingungen anzugeben Property

    Type
  • Description

  • value

  • String

Optionaler Qualifikationsdeskriptor, der den verwendeten Transaktionsmanager angibt

propagation enum: PropagationOptionale Verhaltenseinstellungen für die Transaktionsweitergabe Isolation Aufzählung: IsolationOptionale Einstellungen für die TransaktionsisolationsstufereadOnlybooleanLesen/Schreiben oder schreibgeschützte Transaktionen, standardmäßiges Lesen/Schreiben Timeoutint (in Sekunden Granularität)Einstellung für Transaktionszeitlimit rollbackForKlassenobjekt-Array, muss von Throwable geerbt werdenAusnahmeklassen-Array, das einen Transaktions-Rollback verursachtrollbackFor ClassName Klassennamen-Array, muss von Throwable geerbt werdenAusnahme-Klassennamen-Array, das verursacht Transaktions-RollbacknoRollbackForKlassenobjekt-Array, muss von Throwable geerbt werdenAusnahmeklassen-Array, das keinen Transaktions-Rollback verursachtnoRollbackForClassNameArray von Klassennamen, muss von Throwable geerbt werdenAnzahl der Ausnahmen Klassennamen, die keinen Transaktions-Rollback verursachenStandardmäßig , führt das Spring-Framework die Transaktion nur dann zurück, wenn und auslöst, wenn @Transaction zum Verarbeiten von Transaktionen verwendet wird. Das heißt, wenn eine Instanz von RuntimeException oder ihrer Unterklasse ausgelöst wird, werden von der Transaktionsmethode ausgelöste geprüfte Ausnahmen nicht für ein Transaktions-Rollback markiert. Um aktivierte Ausnahmen zurückzusetzen: Fügen Sie @Transactional(rollbackOn=Exception.class) vor der gesamten Methode hinzu
@Transactional Bei Verwendung der @Transaction-Annotation erinnert Sie das Alibaba-Codespezifikations-Plug-in daran, dass ein Rollback angegeben werden muss. Rollback wird standardmäßig angezeigt.
Laufzeitausnahmenungeprüfte Ausnahmen

Um nicht aktivierte Ausnahmen nicht zurückzusetzen: @Transactional( dontRollbackOn =RunTimeException.class)

So verwenden Sie Java @Transactional, um Rollback-Bedingungen anzugeben

Methode, die keine Transaktionsverwaltung erfordert (nur Abfrage): @Transactional(propagation=Propagation.NOT_SUPPORTED)

Hinweis

:
  • @Transactional(rollbackOn=Exception.class)

  • 让unchecked异常不回滚: @Transactional(dontRollbackOn=RunTimeException.class)

  • 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

注意

  • 如果异常被try-catch了,事务就不会回滚,如果想让事务回滚必须再往外抛try{}catch{throw Exception}Wenn die Ausnahme durch Versuchen abgefangen wird, wird die Transaktion nicht zurückgesetzt. Wenn Sie möchten, dass die Transaktion zurückgesetzt wird, müssen Sie try{}catch{throw Exception} auslösen.

  • Das Spring-Team empfiehlt die Verwendung der @Transactional-Annotation für bestimmte Klassen (oder Klassenmethoden) und nicht für jede Schnittstelle, die die Klasse implementieren möchte. Sie können auch die @Transactional-Annotation auf der Schnittstelle verwenden. In diesem Fall müssen Sie jedoch einen schnittstellenbasierten Proxy einrichten, um wirksam zu werden so einfach wie möglich. Insbesondere bei Transaktionsmethoden mit Sperren ist es am besten, diese nicht in Transaktionen einzufügen, wenn sie vermieden werden können. Regelmäßige Datenbankabfragevorgänge können vor der Transaktion platziert werden, und Vorgänge wie Hinzufügen, Löschen und Ändern können in der Transaktion platziert werden

  • Code

    @Slf4j
    @Service
    public class MemberService {
    
        @Autowired
        private MemberMapper memberMapper;
    
        @Transactional
        public Integer insert(MemberEntity memberEntity) {
            Integer insertResult = 0;
            try {
                insertResult = memberMapper.save(memberEntity);
                log.info("insertResult:{}", insertResult);
                int result = 1 / memberEntity.getAge();
            } catch (Exception e) {
                log.error("errorMsg:{}", e.getMessage());
                //回滚
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            }
            return insertResult;
        }
    }
  • Wie im roten Code oben gezeigt, wenn Sie nicht schreiben Wenn Sie dies tun, wird die Transaktion nicht rückgängig gemacht. Da die Transaktion per Catch abgefangen wird, kann die Transaktion nur manuell zurückgesetzt werden.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Java @Transactional, um Rollback-Bedingungen anzugeben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen