springboot项目 添加 @Transactional(rollbackFor = Exception.class) 注解 抛出异常后sqlserver数据库不进行回滚
时间: 2023-11-11 14:07:31 浏览: 228
可能是因为你的数据库驱动不支持自动提交事务,需要手动提交事务。可以在方法结束前手动提交事务,例如:
```
@Service
public class MyService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional(rollbackFor = Exception.class)
public void myMethod() {
try {
// 执行数据库操作
jdbcTemplate.update("INSERT INTO my_table (name) VALUES (?)", "test");
} catch (Exception e) {
// 抛出异常
throw new RuntimeException(e);
}
// 手动提交事务
TransactionAspectSupport.currentTransactionStatus().flush();
}
}
```
在方法结束前,调用 `TransactionAspectSupport.currentTransactionStatus().flush()` 手动提交事务。这样即使抛出异常,事务也会回滚。
相关问题
springboot 事务配置实例
好的,下面是一个简单的 Spring Boot 事务配置实例:
1. 在 pom.xml 文件中添加如下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
```
2. 在 application.properties 文件中配置数据库连接信息:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# jpa配置
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
```
3. 创建一个 Service 类,在其中定义需要进行事务管理的方法:
```java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// 添加事务注解
@Transactional(rollbackFor = Exception.class)
public void addUser(User user) {
// ......
}
}
```
4. 在 Controller 类中调用 Service 中的方法:
```java
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/add")
public String addUser(User user) {
userService.addUser(user);
return "success";
}
}
```
通过在 Service 中添加 `@Transactional` 注解,来开启事务管理。如果在方法执行过程中发生异常,则会回滚到事务开始前的状态。在 Controller 中调用 Service 方法时,如果出现异常,则会抛出 `RuntimeException` 异常,从而触发事务回滚。
阅读全文