目录
在Springboot中开启数据库的事务的应用开发过程中非常重要的业务,以下是一个使用MySQL数据库,并在方法上开启事务管理的完整Spring Boot示例。
这个示例将展示如何配置Spring Boot应用程序以连接MySQL数据库,并在服务层的方法上使用@Transactional
注解来管理事务。
1. 添加依赖
在pom.xml
文件中添加必要的依赖,包括Spring Data JPA和MySQL驱动程序:
<dependencies>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Other dependencies... -->
</dependencies>
2. 配置数据库连接
在application.properties
或application.yml
文件中配置MySQL数据库连接信息。
application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/testdb
username: root
password: yourpassword
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.MySQLDialect
3. 启用事务管理
在你的Spring Boot主类或者任何配置类上添加@EnableTransactionManagement
注解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@EnableTransactionManagement
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4. 创建实体类和存储库
创建一个简单的用户实体类和对应的存储库接口。
User.java:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getters and setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
UserRepository.java:
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
5. 创建服务类并使用@Transactional注解
在服务层的方法上使用@Transactional
注解来管理事务。
UserService.java:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void saveUser(User user) {
userRepository.save(user);
// 模拟可能抛出异常的操作
if (true) {
throw new RuntimeException("Simulated Exception");
}
}
}
6. 编写测试用例
编写一个测试用例来验证事务管理是否正常工作。
UserServiceTest.java:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.TransactionSystemException;
import static org.junit.jupiter.api.Assertions.assertThrows;
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void testTransaction() {
User user = new User();
user.setName("John");
assertThrows(TransactionSystemException.class, () -> {
userService.saveUser(user);
});
}
}
7. 运行应用程序
确保MySQL数据库正在运行,并且数据库testdb
已创建。然后运行Spring Boot应用程序,测试用例应该能够验证事务管理是否按预期工作。
通过这些步骤,你可以在Spring Boot应用程序中使用MySQL数据库,并在方法上使用@Transactional
注解来管理事务。这样可以确保数据库操作在事务范围内执行,保证数据的一致性和完整性。