"뮤 클래스 네트워크 자바 아키텍트 열차"물론 노트

1. 확산 문제

REQUIRED(必须的)(TransactionDefinition.PROPAGATION_REQUIRED)어떤 거래, 새로운 하나의 트랜잭션이, 아이가 트랜잭션에서 실행 할 수없는 경우 현재의 트랜잭션 (transaction)가 존재하는 경우, 다음 전체 트랜잭션에 참여, 현재의 트랜잭션 (transaction)를 사용합니다.
예를 들어 : 리더십 돈,하지만 난 돈이, 나 자신 (트랜잭션이 존재하지 않음) 먹고 살 것이다 돈 지도자가, 나 (업무) 일부를 줄 것이다 경우;

SUPPORTS(支持)(TransactionDefinition.PROPAGATION_SUPPORTS)현재 트랜잭션이있는 경우, 트랜잭션이 사용되며, 그렇지 않은 경우, 사용되지 않습니다.
예를 들어 : 리더십은 먹지 않았다, 나는 다음과 같은 코드로, 나는 () 메소드 savechild에 트랜잭션을 추가, 먹을 수있는 음식을 가지고 음식을 먹는 선도, 먹지 않았지만, 부모 프로세스의 증가가 없다 나는 부모 방법은 또한 트랜잭션을 추가 해요 경우, 트랜잭션을 달성 할 것, 어떤 비즈니스가 없을 것입니다.

    @Transactional(propagation = Propagation.REQUIRED)
    @Test
    public void saveParent(){
        stuService.saveParent();
        stuService.saveChild();
    }
    //当propagation =  Propagation.SUPPORTS时,单独加这个事务,在调用过程中是不起作用的
    @Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public void saveChild() {
        saveChild1();
        int s = 1/0;
        saveChild2();

    }
    public void saveChild1(){
        Stu stu = new Stu();
        stu.setAge(23);
        stu.setName("child1");
    }

    public void saveChild2(){
        Stu stu = new Stu();
        stu.setAge(23);
        stu.setName("child2");
    }

MANDATORY(强制的)(TransactionDefinition.PROPAGATION_MANDATORY); 이것은 그렇지 않으면 다음과 같은 오류를보고 할 것, 발신자 추가 업무의 부모에 대한 의무 될 것입니다
리더십해야 Guanfan에 관계없이 식사의 내가하지 않았다 : 예를 들어

org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'

	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:364)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:475)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:289)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
	at com.imooc.service.impl.StuServiceImpl$$EnhancerBySpringCGLIB$$ab72f9f8.saveChild(<generated>)
	at com.imooc.TranTest.saveParent(TranTest.java:33)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
	at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)


REQUIRES_NEW(必须创建新的)(TransactionDefinition.PROPAGATION_REQUIRES_NEW)현재 트랜잭션이있는 경우, 트랜잭션은 대기, 그리고 자신의 사용을위한 새로운 트랜잭션을 생성합니다. 어떤 트랜잭션이 동일하지 않는 경우 REQUIRED.

NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) 현재 문제가있는 경우, 대기중인 트랜잭션을 넣어, 그들은 실행되지 않습니다.

NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED)호출자는 트랜잭션을 허용하지 않습니다.
NESTED(TransactionDefinition.PROPAGATION_NESTED)이상이 생겨 호출, 서브 트랜잭션 롤백도 영향을받습니다. 이상 자식 트랜잭션이 발생 우리는 다음 예외가 생겨이라고합니다 경우에도, 그것은 호출자의 실행에 영향을 미치지 않습니다, 발신자 trycatch를 추가한다면, 그러나, 롤백됩니다.

게시 16 개 원래 기사 · 원 찬양 4 · 조회수 2386

추천

출처blog.csdn.net/hzy3344520/article/details/104286490