Heim >Java >javaLernprogramm >So verwenden Sie Java @Transactional, um Rollback-Bedingungen anzugeben
Ausnahmeklassifizierung
Property
Description
value
enum: Propagation | Optionale Verhaltenseinstellungen für die Transaktionsweitergabe | |
---|---|---|
Aufzählung: Isolation | Optionale Einstellungen für die Transaktionsisolationsstufe | |
boolean | Lesen/Schreiben oder schreibgeschützte Transaktionen, standardmäßiges Lesen/Schreiben | |
int (in Sekunden Granularität) | Einstellung für Transaktionszeitlimit | |
Klassenobjekt-Array, muss von Throwable geerbt werden | Ausnahmeklassen-Array, das einen Transaktions-Rollback verursacht | |
Klassennamen-Array, muss von Throwable geerbt werden | Ausnahme-Klassennamen-Array, das verursacht Transaktions-Rollback | |
Klassenobjekt-Array, muss von Throwable geerbt werden | Ausnahmeklassen-Array, das keinen Transaktions-Rollback verursacht | |
Array von Klassennamen, muss von Throwable geerbt werden | Anzahl der Ausnahmen Klassennamen, die keinen Transaktions-Rollback verursachen | |
@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. | |
Laufzeitausnahmen | undungeprüfte Ausnahmen | 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 nicht aktivierte Ausnahmen nicht zurückzusetzen: @Transactional( dontRollbackOn =RunTimeException.class)
@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; } }
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!