@EnableTransactionManagement 是 Spring 提供的一个注解,用于启用 Spring 的事务管理功能。
使用 @EnableTransactionManagement 注解时,Spring 将会创建一个基于注解的事务管理器,它会在你使用 @Transactional 注解的方法上开启事务。在使用 @Transactional 注解时,你可以通过指定传播行为、隔离级别和超时时间等属性,来控制事务的行为。
下面是一个使用 @EnableTransactionManagement 和 @Transactional 的示例:
@Configuration
@EnableTransactionManagement
public class AppConfig {
// 配置数据源等...
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}
@Service
public class UserService {
@Autowired
private UserDAO userDAO;
@Transactional
public void updateUser(User user) {
userDAO.updateUser(user);
}
}
@Repository
public class UserDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
public void updateUser(User user) {
jdbcTemplate.update("UPDATE users SET name = ? WHERE id = ?", user.getName(), user.getId());
}
}
在上面的例子中,@EnableTransactionManagement 注解在 AppConfig 类上,表示启用 Spring 的事务管理功能。transactionManager 方法返回一个 PlatformTransactionManager 对象,它会被 Spring 自动识别为事务管理器。@Transactional 注解标记了 UserService 类中的 updateUser 方法,表示这个方法需要在事务中运行。在 UserDAO 类中,使用了 Spring 的 JdbcTemplate 来访问数据库,而 JdbcTemplate 会自动使用事务。当 updateUser 方法被调用时,如果当前没有事务,Spring 将会开启一个新的事务,执行 updateUser 方法,然后提交或回滚事务。