现在你是一名Java程序员,在springboot项目中如何使用编程式控制事务
时间: 2024-02-16 16:59:57 浏览: 89
在Java中如何使用事务
在Spring Boot项目中,可以使用编程式控制事务的方式来保证数据库操作的一致性和完整性。具体实现方式如下:
1. 在Spring Boot项目中引入Spring事务的依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
```
2. 在配置文件中配置数据源和事务管理器:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 配置事务管理器
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
# 配置事务管理器
spring.datasource.druid.filters=stat,wall
spring.datasource.druid.use-global-data-source-stat=true
# 配置事务管理器
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
# 配置事务管理器
spring.datasource.druid.filter.wall.log-violation=true
spring.datasource.druid.filter.wall.throw-error=false
spring.datasource.druid.filter.wall.update-allow=true
spring.datasource.druid.filter.wall.delete-allow=true
spring.datasource.druid.filter.wall.insert-allow=true
spring.datasource.druid.filter.wall.select-allow=true
spring.datasource.druid.filter.wall.multi-statement-allow=true
# 配置事务管理器
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 配置事务管理器
spring.datasource.druid.connection-init-sqls=SET NAMES utf8mb4 COLLATE utf8mb4_general_ci
# 配置事务管理器
spring.datasource.druid.use-global-data-source-stat=true
# 配置事务管理器
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
# 配置事务管理器
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置事务管理器
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath*:mapper/*.xml
# 配置事务管理器
spring.datasource.druid.stat-view-servlet.allow=true
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
```
3. 在需要实现事务的方法上添加`@Transactional`注解:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void save(User user) {
userMapper.save(user);
//抛出异常
throw new RuntimeException("test transactional");
}
}
```
4. 在需要调用事务的地方调用上述方法即可:
```java
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/user")
public void save(@RequestBody User user) {
userService.save(user);
}
}
```
以上就是在Spring Boot项目中使用编程式控制事务的步骤和示例代码。
阅读全文