在Spring Framework中配置和使用事务管理,可以采用以下几种方式:
即通过XML配置文件或注解来声明事务管理的属性和行为:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.example.UserService.*(..))"/> </aop:config>
@Configuration @EnableTransactionManagement public class AppConfig { @Bean public DataSourceTransactionManager transactionManager() { DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); transactionManager.setDataSource(dataSource()); return transactionManager; } @Bean public UserService userService() { UserServiceImpl userService = new UserServiceImpl(); userService.setUserRepository(userRepository()); return userService; } @Bean public UserRepository userRepository() { return new UserRepositoryImpl(); } } @Service @Transactional public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; // other methods }
即通过编写Java代码来实现事务的管理:
@Autowired private PlatformTransactionManager transactionManager; public void updateUser(User user) { TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { try { userRepository.updateUser(user); } catch (Exception e) { transactionStatus.setRollbackOnly(); } } }); }