美文网首页
Spring中的事务管理

Spring中的事务管理

作者: BlueSkyBlue | 来源:发表于2020-03-20 17:37 被阅读0次

事务简介

事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性。

事务就是一系列的动作。它们被当做一个单独的工作单元。这些动作要么全部都完成,要么全部都不起作用。

Spring中的事务管理

作为企业级应用程序开发框架,Spring在不同事务管理API上定义了一个抽象层,而应用程序开发人员不必了解底层的事务管理API,就可以使用Spring的事务管理机制。

Spring既支持编程式事务管理,又支持声明式的事务管理。
编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚。在编程式管理事务时,必须在每个事务操作时包含额外的事务管理代码。

声明式事务管理:大多数情况下比编程式事务管理更好用,它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。事务管理作为一个横切关注点,可以通过AOP方法模块化。Spring通过Spring AOP框架支持声明式事务管理。

Spring从不同事务管理API中抽象出了一整套事务管理机制。开发人员不必了解底层的事务API,就可以利用这些机制。有了这些事务管理机制,事务管理代码就能独立于特定的事务技术了。

Spring的核心事务管理抽象是Interface PlatformTransactionManager管理封装了一组独立于技术的方法,无论使用Spring的那种事务管理策略(编程式或声明式),事务管理器都是必须的。

使用Spring的事务管理

首先创建一个接口(BookShopDAO)

public interface BookShopDAO {
    public int findBookPriceByISBN(String ISBN);
    public void updateBookStock(String ISBN);
    public void updateUserAccount(String username, int price);
}

之后创建一个实现类(BookShopDAOImpl)并实现接口中的功能。

@Repository("bookShopDAO")
public class BookShopDAOImpl implements BookShopDAO {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public int findBookPriceByISBN(int ISBN) {
        String sql = "select price from book where isbn = ? ";
        return jdbcTemplate.queryForObject(sql, Integer.class, ISBN);
    }

    @Override
    public void updateBookStock(int ISBN) {
        String sql = "update book_stock set stock = stock - 1 where isbn = ? ";
        jdbcTemplate.update(sql, ISBN);
    }

    @Override
    public void updateUserAccount(String username, int price) {
        String sql = "update account set balance = balance - ? where username = ? ";
        jdbcTemplate.update(sql, price, username);
    }
}

测试类

public class TransactionTest {
    private ApplicationContext ctx = null;
    private BookShopDAO bookShopDAO = null;

    {
        ctx = new ClassPathXmlApplicationContext("application-context.xml");
        bookShopDAO = ctx.getBean(BookShopDAO.class);
    }

    @Test
    public void testUserAccount(){
        bookShopDAO.updateUserAccount("AA", 100);
    }

    @Test
    public void testUpdateStock(){
        bookShopDAO.updateBookStock(1001);
    }

    @Test
    public void test(){
        System.out.println(bookShopDAO.findBookPriceByISBN(1001));
    }
}

我们上述的操作都是单一的操作。我们知道事务是一系列操作的集合。如果想实现事务的管理,我们需要把这些操作集中到一处。

先创建接口

public interface BookShopService {
    public void purchase(String username, int ISBN);
}

实现类

@Repository("bookShopService")
public class BookShopServiceImpl implements BookShopService {
    @Autowired
    private BookShopDAO bookShopDAO;

    @Override
    public void purchase(String username, int ISBN) {
        int price = bookShopDAO.findBookPriceByISBN(ISBN);
        bookShopDAO.updateBookStock(ISBN);
        bookShopDAO.updateUserAccount("AA", price);
    }
}

测试类

public class TransactionTest {
    private ApplicationContext ctx = null;
    private  BookShopService bookShopService = null;
    {
        ctx = new ClassPathXmlApplicationContext("application-context.xml");
        bookShopService = ctx.getBean(BookShopService.class);
    }

    @Test
    public void test(){
        bookShopService.purchase("AA", 1001);
    }
}

之后是重头戏,开始配置事务了。首先在配置文件中配置事务管理器

<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

之后在实现类中添加事务注解

@Transactional
@Override
public void purchase(String username, int ISBN) {
    int price = bookShopDAO.findBookPriceByISBN(ISBN);
    bookShopDAO.updateBookStock(ISBN);
    bookShopDAO.updateUserAccount(username, price);
}

相关文章

  • Spring | Spring中如何支持事务

    Spring中的事务管理 Spring在不同的事务管理API之上定义了一个抽象层,我们不必了解底层的事务管理API...

  • Spring中的AOP事务

    【目录】1 Spring的事务管理机制2 Spring事务管理两种方式 1 Spring的事务管理机制 Sprin...

  • Spring事务管理只对出现运行期异常进行回滚

    使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文...

  • spring事务

    1、spring事务管理器PlatformTransactionManager 1.1、没有spring事务管理器...

  • Spring之事务管理

    Spring事务管理(详解+实例)Spring详解(八)------事务管理 一. 概念 事务(Transacti...

  • Spring-事务机制

    一、Spring事务 事务管理概述 Spring事务管理分为编程式事务管理和声明式事务管理两种 编程式事务:允许用...

  • 19、Spring-事务机制-使用

    一、简介 Spring事务管理分为编程式事务管理和声明式事务管理两种, 声明式事务管理:底层是建立在Spring ...

  • 【Note】Spring 事务

    Spring的特色之一,简单而强大的事务管理功能,包括编程式事务和声明式事务。 1.Spring中涉及到事务管理的...

  • Spring事务

    Spring的特色之一,简单而强大的事务管理功能,包括编程式事务和声明式事务。1. Spring中涉及到事务管理的...

  • Spring声明式事务管理之一:五大属性分析

    1.Spring事务管理概述 Spring事务管理分为编程式事务管理和声明式事务管理两种。编程式事务允许用户在实现...

网友评论

      本文标题:Spring中的事务管理

      本文链接:https://www.haomeiwen.com/subject/ucijyhtx.html