spring 트 랜 잭 션 전파 메커니즘 - REQUIRED 내장 REQUIRESNEW

29492 단어 Spring
같은 service 클래스 에서 정 의 된 두 가지 방법 이 있다 면, 내부 REQUIRESNEW 는 새로운 트 랜 잭 션 을 시작 하지 않 습 니 다. save 와 update 에서 스크롤 백 하면 전체 트 랜 잭 션 이 스크롤 백 됩 니 다. 서로 다른 service 에서 정 의 된 두 가지 방법, 내부 REQUIRESNEW 는 새로운 사 무 를 시작 할 것 이 며, 두 사람 은 독립 적 이 며, 사 무 는 서로 영향 을 주지 않 습 니 다.
테스트: 다음 코드 는 UserService 2 에 정의 되 어 있 습 니 다.
/**
    @Transactional(propagation = Propagation.REQUIRED)
    @Override
    public void save(UserRecord userParam) {
        logger.info("     save {}, {}", userParam.getId(), userParam.getPhone());
        userMapper.save(userParam);
        try {
            logger.info("save   ---        {}    sleep", userParam.getId());
            Thread.sleep(1000);
            this.update(userParam);
//          throw new RuntimeException();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


    @Transactional(propagation = Propagation.REQUIRES_NEW)
    @Override
    public Integer update(UserRecord userParam) {
        logger.info("     update {}, {}", userParam.getId(), userParam.getPhone());
        int result = userMapper.update(userParam);
        try {
            logger.info("update   ---        {}    sleep");
            Thread.sleep(1000 * 10);
            logger.info("sleep  ");
//          throw new RuntimeException();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return result;
    }
2017-12-24 08:46:43 [http-nio-9082-exec-3] INFO  c.c.service.impl.UserServiceImpl2 -      save null, 15210712345
2017-12-24 08:46:43 [http-nio-9082-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
2017-12-24 08:46:43 [http-nio-9082-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65e040df]
2017-12-24 08:46:43 [http-nio-9082-exec-3] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [com.mysql.jdbc.JDBC4Connection@665e820d] will be managed by Spring
2017-12-24 08:46:43 [http-nio-9082-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65e040df]
2017-12-24 08:46:43 [http-nio-9082-exec-3] INFO  c.c.service.impl.UserServiceImpl2 - save   ---        222599    sleep
2017-12-24 08:46:44 [http-nio-9082-exec-3] INFO  c.c.service.impl.UserServiceImpl2 -      update 222599, 15210712345
2017-12-24 08:46:44 [http-nio-9082-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65e040df] from current transaction
2017-12-24 08:46:44 [http-nio-9082-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65e040df]
2017-12-24 08:46:44 [http-nio-9082-exec-3] INFO  c.c.service.impl.UserServiceImpl2 - update   ---        {}    sleep
2017-12-24 08:46:54 [http-nio-9082-exec-3] INFO  c.c.service.impl.UserServiceImpl2 - sleep  
2017-12-24 08:46:54 [http-nio-9082-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65e040df]
2017-12-24 08:46:54 [http-nio-9082-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65e040df]
2017-12-24 08:46:54 [http-nio-9082-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65e040df]

테스트 두 개의 save 는 각각 User Service 2 와 User Service 3 에 정의 되 어 있 습 니 다.
    @Transactional(propagation = Propagation.REQUIRED)
    @Override
    public void save(UserRecord userParam) {
        logger.info("     save {}, {}", userParam.getId(), userParam.getPhone());
        userMapper.save(userParam);
        try {
            logger.info("save   ---        {}", userParam.getId());
            // if ("15210712347".equals(userParam.getPhone())) {
            // throw new RuntimeException();
            // }
            Thread.sleep(1000);
            userParam.setName("xxx");
            userParam.setPhone("xxx");
            userService3.save(userParam);
//          throw new RuntimeException();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (AppException ae) {
            ae.printStackTrace();
        }
    }
@Transactional(propagation = Propagation.REQUIRES_NEW)
    @Override
    public void save(UserRecord userParam) {
        logger.info("     save {}, {}", userParam.getId(), userParam.getPhone());
        userMapper.save(userParam);
        try {
            logger.info("save   ---        {}    sleep", userParam.getId());
            Thread.sleep(1000);
//          throw new RuntimeException();//                      userService2.save          
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//         ,     userServive2 save  
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

실행 로 그 는 다음 과 같 습 니 다.
2017-12-24 10:59:43 [http-nio-9082-exec-6] INFO  c.c.service.impl.UserServiceImpl2 -      save null, 15210712345
2017-12-24 10:59:43 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
2017-12-24 10:59:43 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3321d64f]
2017-12-24 10:59:43 [http-nio-9082-exec-6] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [com.mysql.jdbc.JDBC4Connection@4528e9b7] will be managed by Spring
2017-12-24 10:59:43 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3321d64f]
2017-12-24 10:59:43 [http-nio-9082-exec-6] INFO  c.c.service.impl.UserServiceImpl2 - save   ---        222637
2017-12-24 10:59:44 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization suspending SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3321d64f]
2017-12-24 10:59:44 [http-nio-9082-exec-6] INFO  c.c.service.impl.UserServiceImpl3 -      save 222637, xxx
2017-12-24 10:59:44 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
2017-12-24 10:59:44 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@53dd397f]
2017-12-24 10:59:44 [http-nio-9082-exec-6] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [com.mysql.jdbc.JDBC4Connection@58a60a8c] will be managed by Spring
2017-12-24 10:59:44 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@53dd397f]
2017-12-24 10:59:44 [http-nio-9082-exec-6] INFO  c.c.service.impl.UserServiceImpl3 - save   ---        222638    sleep
2017-12-24 10:59:45 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@53dd397f]
2017-12-24 10:59:45 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@53dd397f]
2017-12-24 10:59:45 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization resuming SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3321d64f]
2017-12-24 10:59:45 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3321d64f]
2017-12-24 10:59:45 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3321d64f]
2017-12-24 10:59:45 [http-nio-9082-exec-6] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3321d64f]

좋은 웹페이지 즐겨찾기