Spring Transactional의 전파 특성/격리 수준
프로젝트에 사용된 데이터베이스는 mysql이고 기본 격리 단계는
REPEATABLE_READ
중복 읽기입니다. pgsql과oracle 기본 격리 단계READ_COMMITTED
아래는spring의 다섯 가지 격리 단계입니다. 기본은 데이터베이스를 사용하는 유형과 같습니다. DEFAULT(-1),
READ_UNCOMMITTED(1),
READ_COMMITTED(2),
REPEATABLE_READ(4),
SERIALIZABLE(8);
public class A{
@Transactional(isolation = Isolation.SERIALIZABLE)
public void methodA() {
userMapper.insert();
}
public void methodB() {
userMapper.insert()
}
실행 방법methodA를 실행할 때,methodB의 인터페이스에서select를 사용하면 데이터를 찾을 수 있지만,user표에 대응하는dd/update/delete는 기다리고 있어서 실행할 수 없습니다.이것이 바로 직렬 실행의 격리 단계입니다.
public class A{
@Transactional(isolation = Isolation.SERIALIZABLE)
public void methodA() {
userMapper.insert()
methodB();
}
public void methodB() {
userMapper.insert()
}
같은 클래스에서 실행할 수 있습니다.
public class A{
@Transactional(isolation = Isolation.SERIALIZABLE)
public void methodA() {
userMapper.insert()
methodB();
}
}
public class B{
public void methodB() {
userMapper.insert()
}
@Transactional
public void methodC() {
userMapper.insert()
}
}
이 클래스 A에서methodA가 클래스 B를 호출하는 방법methodB/methodC는 모두 실행할 수 있습니다.
public class A{
@Transactional(isolation = Isolation.SERIALIZABLE)
public void methodA() {
userMapper.insert()
methodB();
}
}
public class B{
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
userMapper.insert()
}
}
이 클래스 A에서methodA가 클래스 B 방법을 호출하면methodB 방법이 사라집니다.Propagation 때문입니다.REQUIRES_NEW 이 전파 단계는 자신
REQUIRES_NEW , , , , 。
입니다. 여기는methodA가methodB를 호출합니다. methodB를 실행할 때methodA 사물이 끊기고 methodB가 실행될 때까지 기다린 후에methodA가 끊긴 사물이 실행을 회복합니다.그러나 여기는methodA의 격리 단계Isolation.SERIALIZABLE
가 직렬로 실행되기 때문에 자물쇠가 사라집니다.
public class A{
public void methodA() {
userMapper.insert()
methodB();
}
}
public class B{
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
userMapper.insert()
}
}
여기 methodA () 방법은 사물이 없습니다. methodB () 방법 @Transactional (propagation = Propagation. REQUIRES NEW) 이 전파 특성은 새로운 사물입니다. 여기 methodA ()는 사물이 실행되지 않고 methodB ()는 사물이 있습니다. 굴러갈 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.