商业网站策划书模板范文,可以打广告的平台,快速搭建网站框架新手攻略,网络公司seo推广简介
事务作用#xff1a;在数据层保障一系列的数据库操作同成功同失败Spring事务作用#xff1a;在数据层或业务层保障一系列的数据库操作同成功同失败
public interface PlatformTransactionManager{void commit(TransactionStatus status) throws TransactionStatus ;vo…简介
事务作用在数据层保障一系列的数据库操作同成功同失败Spring事务作用在数据层或业务层保障一系列的数据库操作同成功同失败
public interface PlatformTransactionManager{void commit(TransactionStatus status) throws TransactionStatus ;void rollback(TransactionStatus status) throws TransactionStatus ;
}基本流程 1、配置当前接口方法具有事务
public interface AccountService {/*** 转账操作* param out 传出方* param in 转入方* param money 金额*///配置当前接口方法具有事务Transactionalpublic void transfer(String out,String in ,Double money) ;
}2、配置事务管理器mybatis使用的是jdbc事务 JdbcConfig.java
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 dataSource() {DruidDataSource ds new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}//配置事务管理器mybatis使用的是jdbc事务Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource) {DataSourceTransactionManager transactionManager new DataSourceTransactionManager();transactionManager.setDataSource(dataSource);return transactionManager;}}3、开启注解式事务驱动 SpringConfig.java
Configuration
ComponentScan(com.itheima)
PropertySource(classpath:jdbc.properties)
Import({JdbcConfig.class,MybatisConfig.class})
//开启注解式事务驱动
EnableTransactionManagement
public class SpringConfig {
}注意
Spring注解式事务通常添加在业务层接口中而不会添加在业务层接口实现类中降低耦合注解式事务可以添加到业务方法上表示当前方法开启事务也可以添加到接口上表示当前接口所有方法开启事务
相关配置 基本格式
public interface AccountService {/*** 转账操作* param out 传出方* param in 转入方* param money 金额*///配置当前接口方法具有事务Transactional(readOnly true,timeout -1)public void transfer(String out,String in ,Double money) ;
}回滚
自动回滚当方法抛出运行时异常(RuntimeException)及其子类或者错误(Error)显式回滚,对于那些不是运行时异常的受检异常即 Exception 类型但不属于 RuntimeException 的异常Spring不会自动回滚事务。然而你可以在 Transactional 注解中使用 rollbackFor 属性来指定哪些具体的异常类型应该触发事务回滚。
public interface AccountService {/*** 转账操作* param out 传出方* param in 转入方* param money 金额*///配置当前接口方法具有事务Transactional(rollbackFor {IOException.class,FileNotFoundException.class})public void transfer(String out,String in ,Double money) ;
}设置事务传播行为
public interface AccountService {Transactionalpublic void transfer(String out,String in ,Double money) throws IOException;
}public interface LogService {//propagation设置事务属性传播行为设置为当前操作需要新事务Transactional(propagation Propagation.REQUIRES_NEW)void log(String out, String in, Double money);
}Service
public class AccountServiceImpl implements AccountService {Autowiredprivate AccountDao accountDao;Autowiredprivate LogService logService;public void transfer(String out, String in, Double money) {try {accountDao.outMoney(out, money);int i 1 / 0;accountDao.inMoney(in, money);} finally {logService.log(out, in, money);}}}通过设置propagation属性让某一个操作创建新的事务保证不会被其他事务的影响