woo8386
112
2020-07-23 21:51:36 작성 2020-07-23 21:52:21 수정됨
1
137

스프링 마이바티스 트랜잭션


@Bean

public DataSourceTransactionManager transactionManager() {

return new DataSourceTransactionManager(dataSource());

}


@Transactional(rollbackFor = NullPointerException.class)

@Override

public boolean addBoard(Map<String, Object> model) {

    long sequence = 0;


    try{

        //다음 시퀀스 번호 얻기

        sequence = boardDao.selectNextSequence();

        model.put("no",sequence);


        //테이블 삽입

        boardDao.insertBoard(model);


        //파일 관련 작업

        List<MultipartFile> files = (List<MultipartFile>) model.get("files");

        

        if(files.size() == 0) {

            //TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

            throw new NullPointerException("파일이 없음");

        }


트랜잭션 등록하였고 서비스단 코드중 일부입니다.

db자체 에러는 트랜잭션 적용되는거 확인 했었는데 

자바코드 에러 날때는 어떻게 되나 궁금해서 찾다가

rollbackFor 등록 하면 된다고 해서 했는데 아무리 해도 게시글 추가하고 롤백을 안합니다.

주석 처리된 저거를 하면 잘되구요.

혹시 빈등록을 더해야 하는게 있는건가요??


0
  • 답변 1

  • freestyle
    3k
    2020-07-24 06:14:29

    @Transactional과 같은 선언적 트랜잭션을 적용하는 경우에는 AOP를 이용하고, 또 스프링에서는 기본적으로 AOP를 JDK 다이나믹 프록시로 구현하고 있습니다. 더 궁금하면 관련하여 검색하시고...

    아무튼 이런 이유로 AOP를 적용하려는 클래스는 반드시 어떤 인터페이스를 구현해야 합니다. 본문의 코드 상으로는 알 수가 없지만 혹시 서비스 클래스를 인터페이스 정의없이 작성한 것이 아닌가 하는 생각이 드네요.

  • 로그인을 하시면 답변 을 등록할 수 있습니다.