您的位置:首页 > 娱乐 > 明星 > 如何在Springboot中添加事务执行?(以MySQL为例)

如何在Springboot中添加事务执行?(以MySQL为例)

2024/10/6 22:22:38 来源:https://blog.csdn.net/lgbingyu00/article/details/139863404  浏览:    关键词:如何在Springboot中添加事务执行?(以MySQL为例)

目录

1. 添加依赖

2. 配置数据库连接

3. 启用事务管理

4. 创建实体类和存储库

5. 创建服务类并使用@Transactional注解

6. 编写测试用例

7. 运行应用程序


在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.propertiesapplication.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/testdbusername: rootpassword: yourpassworddriver-class-name: com.mysql.cj.jdbc.Driverjpa:hibernate:ddl-auto: updatedatabase-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 setterspublic 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 {@Autowiredprivate UserRepository userRepository;@Transactionalpublic 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 {@Autowiredprivate UserService userService;@Testpublic void testTransaction() {User user = new User();user.setName("John");assertThrows(TransactionSystemException.class, () -> {userService.saveUser(user);});}
}

7. 运行应用程序

确保MySQL数据库正在运行,并且数据库testdb已创建。然后运行Spring Boot应用程序,测试用例应该能够验证事务管理是否按预期工作。

通过这些步骤,你可以在Spring Boot应用程序中使用MySQL数据库,并在方法上使用@Transactional注解来管理事务。这样可以确保数据库操作在事务范围内执行,保证数据的一致性和完整性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com