@transactional 工程实践
时间: 2023-09-02 18:12:23 浏览: 103
spring-jdbcTemplate实例工程
@Transactional 是 Spring 框架中用于管理事务的注解。在使用 @Transactional 注解时,需要将该注解放置在需要进行事务管理的方法或类上。
在实际工程中,一般建议将 @Transactional 注解放置在 Service 层的方法上,因为 Service 层是业务逻辑的处理层,通常需要对多个 DAO 层的操作进行事务管理。
例如:
```java
@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);
}
}
```
在上述代码中,UserService 类中的 addUser、updateUser 和 deleteUser 方法都加上了 @Transactional 注解,表示这些方法需要进行事务管理。当执行这些方法时,如果其中任意一个方法出现异常,Spring 框架会自动回滚该方法所执行的所有操作。
当然,在使用 @Transactional 注解时,还需要配置事务管理器。在 Spring Boot 中,可以通过在 application.properties 文件中配置相关的属性来实现事务管理。
例如:
```properties
# 数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
# 事务管理器配置
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.jdbc.batch_size=20
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
```
总体来说,在实际工程中,使用 @Transactional 注解来管理事务是一种比较成熟的做法。但是需要注意的是,在使用 @Transactional 注解时,需要仔细分析业务逻辑,避免出现事务的嵌套和事务的传播问题。
阅读全文