说明
选项 7个 | 说明 |
---|---|
PROPAGATION_REQUIRED(默认) | 有事务则加入,没事务则创建 |
PROPAGATION_REQUIRES_NEW | 有无都建新,内部事务不受外部影响 |
PROPAGATION_SUPPORTS | 有加入,没有就非事务执行 |
PROPAGATION_NOT_SUPPORTED | 有则挂起,非事务执行,不受事务影响 |
PROPAGATION_MANDATORY | 有加入,无抛异常;必须在一个事务内执行 |
PROPAGATION_NEVER | 非事务执行,有则抛异常。 |
PROPAGATION_NESTED | 有则创建嵌套事务执行;无则建新。 |
嵌套事务是外部事务的一部分,可以单独回滚,也可以由外部事务一起提交。
xml配置
通过<tx:advice> <aop:config>
配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx">
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务切面和通知 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.example.service.*.*(..))"/>
</aop:config>
</beans>
注解配置
基于@Transactional
配置 开启事务 @EnableTransactionManagement
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void addUser(User user) {
userDao.addUser(user);
}
@Transactional
public void updateUser(User user) {
userDao.updateUser(user);
}
@Transactional
public void deleteUser(int userId) {
userDao.deleteUser(userId);
}
// ...
}
@Configuration
@EnableTransactionManagement
public class AppConfig {
@Autowired
private DataSource dataSource;
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public UserService userService() {
return new UserService();
}
// ...
}
涉及的类(未完)
DataSourceTransactionManager