南昌建站软件,龙岩做网站的,wordpress地址设置方法,人工智能网页设计1 基本概念
事务#xff1a;将一组操作抽象成一个不可再分的单位#xff0c;这组操作可以有很多个#xff0c;但是它们要么就全部都执行成功#xff0c;这时算作事务执行成功#xff1b;要不其中有操作执行失败#xff0c;则其余操作都视为执行失败#xff0c;这时候需…1 基本概念
事务将一组操作抽象成一个不可再分的单位这组操作可以有很多个但是它们要么就全部都执行成功这时算作事务执行成功要不其中有操作执行失败则其余操作都视为执行失败这时候需要将已执行的方法撤回
事务的概念在很多地方都有涉及特别是在数据库操作上面十分重要因为这涉及到保障数据一致性的问题
Spring 中的事务主要是保证持久层或者业务层操作的。
2 Spring 中使用事务管理
2.1 配置事务管理器
package cn.edu.njust.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;/*** -- coding: UTF-8 -- *** author wangs* description: 数据源 Druid* date 2023/11/15 16:37*/
public class JDBCConfig {Value(${jdbc.driver})private String driver;Value(${jdbc.url})private String url;Value(${jdbc.username})private String username;Value(${jdbc.password})private String password;Beanpublic DataSource getDataSource() {DruidDataSource dataSource new DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}// 配置事务管理器mybatis使用的是jdbc事务Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource) {DataSourceTransactionManager transactionManager new DataSourceTransactionManager();transactionManager.setDataSource(dataSource);return transactionManager;}
}
1getDataSource()方法是获取相对应数据源比如这里获取的是 Druid 数据源 2transactionManager()这个方法是返回获取一个事务管理器想要开启 Spring 的事务必须要配置这个事务管理器
2.2 启用事务管理
主要是在配置类中使用注解声明启用EnableTransactionManagement
package cn.edu.njust.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;/*** -- coding: UTF-8 -- *** author wangs* description: Spring配置类* date 2023/11/15 16:36*/
Configuration
ComponentScan(cn.edu.njust)
PropertySource(classpath:jdbc.properties)
Import({JDBCConfig.class, MyBatisConfig.class})
EnableTransactionManagement
public class SpringConfiguration {
}
2.3 使用注解声明需要被管理的方法
Transactional
public void transfer(String out, String in, Double money) {accountDao.outMoney(out, money);// 在两个操作之间制造一个错误System.out.println(1 / 0);accountDao.inMoney(in, money);
}1这个注解声明后会告知 Spring 管理该事务 2声明在方法上这个方法被事务管理 3声明在类上/接口上这个类/接口的实现类中的所有方法都被事务管理
2.4 事务的传播行为
在 Spring 中如果有使用Transactional 注解注明多个不同的方法这些方法的事务会被统一管理即一个方法中执行失败会将另一个方法中的事务也回滚但是实际上希望两个方法的事务分开就需要在Transactional 参数中设置
//propagation设置事务属性传播行为设置为当前操作需要新事务
Transactional(propagation Propagation.REQUIRES_NEW)3 知识汇总
**注解 **说明Transactional注解需要放入事务管理器的方法或类EnableTransactionManagement在配置类中开启事务管理