Transactional Isolation And Propagation: Difference between revisions

From Chorke Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 14: Line 14:
* <code>Serializable</code>: Performs all transactions in a sequence.
* <code>Serializable</code>: Performs all transactions in a sequence.
The different levels have different performance characteristics in a <code>multi-threaded</code> application. Those who understand the <code>dirty reads</code> concept they are able to be select a good option.
The different levels have different performance characteristics in a <code>multi-threaded</code> application. Those who understand the <code>dirty reads</code> concept they are able to be select a good option.
==Isolation Level==
defines how the changes made to some data repository by one transaction affect other simultaneous concurrent transactions, and also how and when that changed data becomes available to other transactions. When we define a transaction using the Spring framework we are also able to configure in which isolation level that same transaction will be executed.
<source lang="java">
@Transactional(isolation=Isolation.READ_COMMITTED)
public void someTransactionalMethod(Object obj) {
}
</source>
* <code>READ_UNCOMMITTED</code> isolation level states that a transaction may read data that is still uncommitted by other transactions.
* <code>READ_COMMITTED</code> isolation level states that a transaction can't read data that is not yet committed by other transactions.
* <code>REPEATABLE_READ</code> isolation level states that if a transaction reads one record from the database multiple times the result of all those reading operations must always be the same.
* <code>SERIALIZABLE</code> isolation level is the most restrictive of all isolation levels. Transactions are executed with locking at all levels (read, range and write locking) so they appear as if they were executed in a serialized way.
==Propagation==


==References==
==References==
* [https://stackoverflow.com/questions/8490852 Spring Transactional Isolation & Propagation]
* [https://stackoverflow.com/questions/8490852 Spring Transactional Isolation & Propagation]
* [https://www.byteslounge.com/tutorials/spring-transaction-isolation-tutorial Spring transaction isolation level tutorial]
* [https://www.byteslounge.com/tutorials/spring-transaction-isolation-tutorial Spring transaction isolation level tutorial]

Revision as of 20:40, 18 November 2019

Propagation

Defines how transactions relate to each other. Common options:

  • Required: Code will always run in a transaction. Creates a new transaction or reuses one if available.
  • Requires_new: Code will always run in a new transaction. Suspends the current transaction if one exists.

Isolation

Defines the data contract between transactions.

  • Read Uncommitted: Allows dirty reads.
  • Read Committed: Does not allow dirty reads.
  • Repeatable Read: If a row is read twice in the same transaction, the result will always be the same.
  • Serializable: Performs all transactions in a sequence.

The different levels have different performance characteristics in a multi-threaded application. Those who understand the dirty reads concept they are able to be select a good option.

Isolation Level

defines how the changes made to some data repository by one transaction affect other simultaneous concurrent transactions, and also how and when that changed data becomes available to other transactions. When we define a transaction using the Spring framework we are also able to configure in which isolation level that same transaction will be executed.

@Transactional(isolation=Isolation.READ_COMMITTED)
public void someTransactionalMethod(Object obj) {

}
  • READ_UNCOMMITTED isolation level states that a transaction may read data that is still uncommitted by other transactions.
  • READ_COMMITTED isolation level states that a transaction can't read data that is not yet committed by other transactions.
  • REPEATABLE_READ isolation level states that if a transaction reads one record from the database multiple times the result of all those reading operations must always be the same.
  • SERIALIZABLE isolation level is the most restrictive of all isolation levels. Transactions are executed with locking at all levels (read, range and write locking) so they appear as if they were executed in a serialized way.

Propagation

References