java - 이란 - Spring에서 트랜잭션을 사용할 때 포스트 커밋 만들기




spring commit 시점 (2)

Grooveek의 답변과 그 밑에있는 Alex의 의견에 공감 함 -이 제안은 결합 된 제안이 그물 주변에서 찾기 힘든 견고하고 깨끗한 솔루션을 제공하기 때문에 여기에 넣었습니다.

Spring 4+ 사용. 성공적으로 커밋 한 후에 @Transactional 메서드에 대한 콜백이 필요한 경우 메서드 시작 부분에 추가합니다.

@Service
public class OneService {

    @Autowired
    OneDao dao;

    @Transactional
    public void a transactionalMethod() {
        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){
            public void afterCommit(){
                //do stuff right after commit
                System.out.println("commit!!!");

            }
        });
        //do db stuff
        dao.save();
    }
}

내가 수동으로 트랜잭션 커밋을 수행하고 Spring PlatformTransactionManager를 사용하여 롤백했기 때문에 트랜잭션 커밋 후에 커밋 작업이 수행되도록 후크를 설정해야합니다.

조사 대상 :

 void commit(TransactionStatus status) throws TransactionException;

나는 아무런 예외도 발생시키지 않으면 트랜잭션이 성공했다고 판단 할 수 없다.

그리고 나는 AOP를 하나의 옵션으로 사용할 수 있지만 programmitcally에서 콜백 메소드를 사용하는 것은 어떨까요?


특정 이유로 인해 제 프로젝트에서 PlatformTransactionManager 를 사용해야했습니다. 그래서 org.springframework.transaction.support.TransactionTemplate 을 사용해야했습니다.

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/transaction/support/TransactionTemplate.html

주된 이점은 PlatformTransactionManager를 올바르게 구현 한 경우 수동 커밋 / 롤백을 신경 쓰지 않아도된다는 것입니다. 좀 더 구체적인 것이 필요하다면 최소한 TransactionTemplate의 소스 코드가 도움이 될 수 있습니다.

꽤 사용하기 간단합니다.

config.xml

<bean name="transactionTemplate"
            class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="platformTransactionManager"/>
</bean>

MyServiceImpl.java

@Service
public class MyServiceImpl implements MyService {

    @Autowired
    private TransactionTemplate transactionTemplate;

    public Entity getSomethingWithTx(final long id) {

        return transactionTemplate.execute(new TransactionCallback<Entity>() {
            @Override
            public Entity doInTransaction(TransactionStatus status) {
                //TODO implement
            }
        });
    }







transactions