详解原生Spring当中的事务
Spring 的事务管理可以通过声明式事务管理来实现,主要有两种方式:
- 使用
@Transactional
注解来标注方法,使其拥有事务性。 - 使用 XML 配置或 Java 配置的方式来定义事务管理器。
以下是使用 @Transactional
注解的示例:
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class MyService {
@Transactional
public void someTransactionalMethod() {
// 方法中的代码将在事务的上下文中执行
// 如果方法执行期间抛出异常,Spring将自动回滚事务
}
}
在 XML 配置中,你可能会有如下配置:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 其他 Bean 定义 -->
<!-- 事务管理器配置,使用 DataSourceTransactionManager 对 JDBC 事务进行管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 启用事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
Java 配置方式:
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
@EnableTransactionManagement
public class AppConfig {
@Autowired
private DataSource dataSource;
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
在配置事务管理器时,你可以选择合适的事务管理器,如 DataSourceTransactionManager
(针对 JDBC)、JtaTransactionManager
(用于分布式事务)等,并通过相应的属性或方法进行配置。
注意,为了使 @Transactional
注解生效,你需要在配置类上添加 @EnableTransactionManagement
注解。
评论已关闭