메소드 a, b 및 c를 포함하여 @Transactional
으로 표시된 여러 가지 메소드가있는 서비스가 있습니다. 이 3 가지 메소드는 다음과 같은 방식으로 중첩됩니다. a -> b -> c.SQL Server 2012에서 Spring @Transactional 및 PROPAGATION_REQUIRES_NEW
@Transactional
public void a() {
while(condition) {
try {
b();
} catch(MyException e) {
logger.warn(e.getMessage());
}
}
}
B 법은 그러나이 같은 주석된다 : 다음 코드 샘플이다 MyException
는 방법 C에서 발생 될 때 종료 할 때
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {MyException.class})
하지만, 예외는 방법 A에 걸려있다가, 트랜잭션은 완료되고 b()에 대한 호출에 의해 예외가 발생하고 롤백 (?) 된 것이 무엇이든지 포함됩니다. 내가 SQL 서버 2012을 사용하고 봄 3.0.7로 표현하고 내 스프링 구성은 다음과 같이이다 : 보인다 b
<tx:annotation-driven />
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<qualifier value="txm1"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceXmlLocation" value="classpath:META-INF/jpa-persistence.xml"/>
<property name="persistenceUnitName" value="Unit1" />
</bean>