@Transactional注解使用
时间: 2023-08-25 16:12:01 浏览: 123
@Transactional注解是Spring框架提供的一个注解,用于标识方法或类需要进行事务管理。在Spring中,事务管理是通过AOP(面向切面编程)来实现的。
当一个方法或类被@Transactional注解标识时,Spring会在执行该方法或类的过程中开启一个事务,并且在方法执行结束后根据方法执行的结果来决定是提交事务还是回滚事务。
@Transactional注解可以应用于方法级别和类级别。当应用于方法级别时,只有被该注解标识的方法会参与事务管理;当应用于类级别时,该类中的所有公共方法都会参与事务管理。
@Transactional注解还可以设置一些属性来定义事务的行为,例如事务的隔离级别、传播行为、超时时间等。这些属性可以根据实际需求进行配置。
需要注意的是,@Transactional注解只对public方法有效,对于非public方法或私有方法,Spring将忽略该注解。同时,该注解也只对由Spring容器管理的Bean起作用。
总结起来,@Transactional注解是用于标识需要进行事务管理的方法或类,在Spring框架中使用该注解可以简化事务管理的配置和操作。
相关问题
@Transactional注解使用规范
@Transactional注解是Spring框架中用于声明事务的注解。它可以应用在类或方法上,用于标识需要进行事务管理的代码块。使用@Transactional注解可以简化事务管理的配置,提高开发效率。
@Transactional注解的使用规范如下:
1. 注解位置:可以在类级别或方法级别上使用@Transactional注解。在类级别上使用注解表示该类的所有方法都将被事务管理,而在方法级别上使用注解表示该方法将被事务管理。
2. 事务传播行为:@Transactional注解提供了多种事务传播行为选项,用于定义事务的传播方式。常用的传播行为包括REQUIRED、REQUIRES_NEW、NESTED等。
3. 事务隔离级别:@Transactional注解还可以指定事务的隔离级别,用于控制事务之间的相互影响程度。常用的隔离级别包括DEFAULT、READ_COMMITTED、SERIALIZABLE等。
4. 异常回滚:@Transactional注解还可以指定哪些异常触发事务回滚。可以通过设置rollbackFor属性来指定需要回滚的异常类型,或者设置noRollbackFor属性来指定不需要回滚的异常类型。
5. 事务超时:@Transactional注解还可以设置事务的超时时间,用于控制事务执行的最长时间。可以通过设置timeout属性来指定超时时间,单位为秒。
@Transactional注解使用样例
@Transactional注解在Spring中用于管理事务。下面是一些使用@Transactional注解的场景样例:
1. 场景一:在方法上使用@Transactional注解,使事务正常起作用。当方法执行没有异常时,事务会正常提交;当方法执行出现异常时,数据会回滚。
代码示例:
```
@Service
public class ComeServiceImpl implements ComeService {
@Autowired UserMapper userMapper;
@Override
@Transactional
public int saveUser() {
User user1 = new User(11,"a",111,"a");
userMapper.saveUser(user1);
// int i = 1 / 0;
User user2 = new User(11,"b",111,"b");
userMapper.saveUser(user2);
return 0;
}
}
```
2. 场景二:在类的方法上使用@Transactional注解,指定事务的传播行为(Propagation)和隔离级别(Isolation)。
代码示例:
```
@Service
public class ComeServiceImpl implements ComeService {
@Autowired UserMapper userMapper;
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public int saveUser() {
// ...
}
}
```
3. 场景三:在类的方法上使用@Transactional注解,指定事务的只读属性(readOnly)。
代码示例:
```
@Service
public class ComeServiceImpl implements ComeService {
@Autowired UserMapper userMapper;
@Override
@Transactional(readOnly = true)
public User getUser(int id) {
return userMapper.getUser(id);
}
}
```
4. 场景四:在类的方法上使用@Transactional注解,指定事务的超时时间(timeout)。
代码示例:
```
@Service
public class ComeServiceImpl implements ComeService {
@Autowired UserMapper userMapper;
@Override
@Transactional(timeout = 10)
public int saveUser() {
// ...
}
}
```
5. 场景五:同一个Service内方法调用,当@Transactional注解作用在B方法上时,事务不起作用。即使A方法使用了@Transactional注解,B方法内部的事务不会被管理。
代码示例:
```
@Service
@Slf4j
public class ComeServiceImpl implements ComeService {
@Autowired UserMapper userMapper;
@Override
@Transactional
public int A() {
User user1 = new User(11,"a",111,"a");
userMapper.saveUser(user1);
this.B();
return 0;
}
@Override
public int B() {
User user2 = new User(11,"b",111,"b");
userMapper.saveUser(user2);
int i = 1 / 0;
return 0;
}
}
```
阅读全文