spring事务管理的基础配置
数据源配置
此配置类提供了使用 DruidDataSource
组件进行数据库连接的必要设置,该组件是一个高性能的 JDBC 连接池。此外还初始化了一个 JdbcTemplate
用于执行查询,以及一个 org.springframework.transaction.PlatformTransactionManager
用于管理事务。
数据源 Bean
dataSource
方法负责创建并配置一个 DruidDataSource
Bean。属性如数据库驱动、URL、用户名和密码是从应用配置(例如 application.properties
或 application.yml
)中通过 @Value
注解获取的。
方法签名:
@Bean
public DataSource dataSource(
@Value("${db.driver}") String driver,
@Value("${db.url}") String url,
@Value("${db.username}") String username,
@Value("${db.password}") String password
) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
参数:
driver
: JDBC 驱动类名。url
: 连接到数据库的 JDBC URL。username
: 数据库连接的用户名。password
: 数据库连接的密码。
返回值:
- 配置好的
DruidDataSource
实例。
JdbcTemplate Bean
jdbcTemplate
方法创建并配置了一个 JdbcTemplate
Bean,这简化了数据库操作的执行。此 Bean 使用之前创建的数据源。
方法签名:
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
参数:
dataSource
: 要由JdbcTemplate
使用的DataSource
实例。
返回值:
- 配置好的
JdbcTemplate
实例,准备好执行数据库操作。
事务管理器 Bean
transactionManager
方法设置了使用提供的数据源的事务管理器。这对于在应用程序中管理事务是必不可少的。
方法签名:
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
参数:
dataSource
: 要由事务管理器使用的DataSource
实例。
返回值:
- 配置好的
PlatformTransactionManager
实例,用于管理指定数据源的事务。
源代码
/**
* 配置类,用于设置Spring应用的基础配置。
*/
@Configuration
@EnableAspectJAutoProxy // 开启AOP支持
@EnableTransactionManagement // 开启事务管理
@ComponentScan(basePackages = "com.gmu") // 扫描指定包下的组件
@PropertySource("classpath:db.properties") // 加载外部配置文件
public class AppConfig {
// 数据源配置
@Bean
public DataSource dataSource(
@Value("${db.driver}") String driver,
@Value("${db.url}") String url,
@Value("${db.username}") String username,
@Value("${db.password}") String password
) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
// JdbcTemplate 配置
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
/**
* 创建事务管理器对象。
*
* @param dataSource 数据源实例
* @return 配置好的事务管理器
*/
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
导入必要依赖
<!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.6</version>
</dependency>
<!--junit5测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.0.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency>
<!-- 数据库驱动 和 连接池-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.0.6</version>
</dependency>
<!-- 声明式事务依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
依赖项的解释:
Spring Context
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.6</version>
</dependency>
- 作用:这是Spring框架的核心模块之一,提供了核心的IoC容器功能。它还包含了对国际化、事件发布、资源加载等功能的支持。
- 引入其他依赖:当引入
spring-context
依赖时,会自动引入Spring框架的基础依赖,如spring-core
和spring-beans
。
JUnit 5 测试
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
</dependency>
- 作用:JUnit 5 是JUnit框架的新版本,提供了一套新的API和特性来编写和运行单元测试。
- 用途:定义测试用例的API,通常与
junit-jupiter-engine
一起使用来运行测试。
Spring Test
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.0.6</version>
<scope>test</scope>
</dependency>
- 作用:提供了Spring框架的测试支持,包括Mockito集成、Web MVC测试等。
- 用途:用于编写Spring应用程序的单元测试和集成测试。
Jakarta Annotations API
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency>
- 作用:Jakarta Annotations API 提供了常用的标准Java注解,如
@Override
、@Deprecated
等。 - 用途:用于标记Java类和方法,以提供元数据或控制行为。
MySQL Connector/J
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
- 作用:MySQL的官方Java驱动,用于连接MySQL数据库。
- 用途:实现与MySQL数据库的交互。
Druid Connection Pool
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
- 作用:高性能的Java数据库连接池实现。
- 用途:提供高效、稳定的数据库连接管理和性能监控。
Spring JDBC
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.0.6</version>
</dependency>
- 作用:提供了简化JDBC操作的工具,包括异常处理和模板类。
- 用途:简化数据库访问代码,提高可读性和可维护性。
####Spring TX (Transaction)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>6.0.6</version>
</dependency>
- 作用:提供了声明式事务管理支持。
- 用途:简化事务管理代码,通过注解或XML配置实现事务边界控制。
Spring AOP
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>6.0.6</version>
</dependency>
- 作用:提供了面向切面编程的支持。
- 用途:实现诸如日志记录、安全控制等横切关注点。
Spring Aspects
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>6.0.6</version>
</dependency>
- 作用:提供了与AspectJ集成的支持。
- 用途:允许使用AspectJ编写AOP切面,并在Spring环境中使用。
这些依赖项共同构成了一个Spring应用程序的基本架构,支持数据库访问、事务管理、AOP等功能,并且提供了测试支持。