栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring总结—事务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring总结—事务

Spring总结—事务


(1)创建数据库表,添加记录

(2)创建service,搭建dao,完成对象创建和注入关系
service注入dao,在dao中注入JDBCTemplate,JDBCtemplate中注入DataSource
(3)转账实现
多钱与少钱的方法

@Override
public void addMoney() {
    String sql="update t_account set money=money+? where username=?";
    int marry = jdbcTemplate.update(sql, 100, "mary");
    System.out.println(marry);

}

@Override
public void reduceMoney() {
    String sql="update t_account set money=money-? where username=?";
    int lucy = jdbcTemplate.update(sql, 100, "lucy");
    System.out.println(lucy);
}

转账的方法(二者都实现,事务—都实现)

@Autowired
private UserDao userDao;
public void setMoney(){
    userDao.reduceMoney();
    userDao.addMoney();
}

(4)上面代码,如果正常执行没有问题,但是如果执行过程中出现异常,则会出现问题。

执行后,不会执行加钱的方法
上面的问题怎么解决呢?
使用事务进行解决(要么都成功,要么都失败)

事务操作(Spring事务管理介绍)

    事务添加到JavaEE三层结构里面
    service层(业务逻辑层)web层(业务) dao层在spring进行事务管理操作
    有两种方式 :编程式事务管理和声明式事务管理(使用) (一般不会使用编程式,会使代码臃肿)声明式事务管理
    基于注解方式(使用)
    基于xml配置文件方式在spring 进行声明式事务管理,底层使用AOPspring事务管理API
    提供了一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类,PlatformTransactionManager接口中有各种实现类

    事务操作 (注解声明式事务管理)
    (1)在Spring配置文件中配置事务管理器

    (2)在spring 配置文件中开启事务注解
    在spring配置文件中引入名称空间tx
    开启事务注解

    (3)在service类上面添加事务注解

    @Transactional,这个注解添加到类上面,也可以添加到方法上面
    如果把这个注解添加类上面,这个类里面所有的方法都添加了事务
    如果把这个注解添加到方法上面,则只有这个方法添加了事务事务操作(声明式事务管理参数配置)
    (1)在service类上面添加注解@Transactional,在这个注解里面可以配置事务相关参数

    <1>Propagation 事务传播行为
    多事务方法之间直接进行调用,在这个过程中事务是如何进行管理的


    <2> Isolation :事务隔离级别
    事务有个特性称为隔离性,多事务操作之间不会产生影响,不考虑隔离性会产生很多问题。
    有三个对问题:脏读、不可重复读、虚(幻)读
    脏读:一个未提交事务读取到另一个未提交事务的数据
    不可重复读:一个未提交事务读取到另一个已提交事务的数据
    虚读:一个未提交事务读到另一个提交事务添加的数据

通过设置事务隔离级别,解决读问题


<3>timeout:超时时间
事务在一定的时间内进行提交,如果不提交进行回滚
默认值是-1 ,设置时间以秒为单位进行计算
<4> readonly :是否只读
读:查询操作
写:添加修改删除操作
readOnly默认值是false。表示可以查询,可以添加修改删除操作
设置readonly的值是TRUE,设置成TRUE后,只能查询。
<5>rollbackfor :回滚 设置出现哪些异常进行事务回滚
<6>norollbackfor :不回滚 设置出现哪些异常不进行回滚

    事务操作(xml声明式事务管理)
    (1)第一步配置事务管理器
    (2)第二步配置通知
    (3)第三步配置切入点和切面
	
    
        
    

    

        

            
        
    


    

        

        
    

    事务操作(完全注解开发)
    创建配置类,使用配置类类替代xml文件
    配置类
package com.sun.Spring.Dao.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

@Configuration   //配置类
//组件扫描
@ComponentScan(basePackages ="com.sun.Spring.Dao")
//开启事务
@EnableTransactionManagement
public class TxConfig {
//    创建数据库连接池
    @Bean
    public DruidDataSource getDruidDataSource(){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///java");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;     //返回值是DruidDataSource类型的
    }
//    创建JDBCTemplate对象
    @Bean
    public JdbcTemplate getJdbcTemplate(DataSource dataSource){
//        到ioc容器中根据类型找到dataSource对象进行注入
        JdbcTemplate jdbcTemplate=new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
//    配置事务管理器
    @Bean
    public DataSourceTransactionManager getdataSourceTransactionManager(DataSource dataSource){
        DataSourceTransactionManager TransactionManager=new DataSourceTransactionManager();
        TransactionManager.setDataSource(dataSource);
        return TransactionManager;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/778721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号