博客
关于我
spring笔记(三)
阅读量:465 次
发布时间:2019-03-06

本文共 2192 字,大约阅读时间需要 7 分钟。

Spring事务控制详解

1.程序中事务控制

在应用程序中,事务控制是确保数据库操作的原子性、一致性、隔离性和持久性的关键环节。Spring框架通过声明式事务管理提供了简便的解决方案,能够有效实现事务控制。

1.1 环境准备

一个典型的Spring应用程序架构如下:用户访问 → Action → Service → Dao

在业务逻辑执行过程中,事务控制应在Service层统一管理。这是因为:

  • 服务层的每个方法调用代表一个业务操作
  • 所有涉及的DAO操作必须在同一个事务中执行
  • 如果某个DAO操作失败,整个事务需要回滚

模拟案例:在Service层调用两个DAO方法,要求如果其中一个方法抛出异常,整个操作必须回滚。

1.2 事务控制概述

编程式事务控制

手动控制事务的实现方式,通常需要在代码中显式地开启、提交和回滚事务。例如:

  • JDBC: Conn.setAutoCommit(false)
  • Hibernate: Session.beginTransaction()

这种方式灵活,但开发和维护成本较高,因为需要对每个需要事务控制的方法进行详细配置。

声明式事务控制

Spring提供了基于AOP的声明式事务管理,实现了对事务控制的最大程度的解耦。开发者只需在配置文件中配置事务管理方式,就可以实现事务控制,而无需手动编写事务相关代码。

1.3 事务管理器类

Spring支持两种主要的事务管理器:

  • DataSourceTransactionManager:基于JDBC的事务管理
  • HibernateTransactionManager:基于Hibernate的事务管理

2.声明式事务管理

2.1 XML配置方式

为了实现声明式事务管理,需要在Spring的配置文件中进行如下配置:

  • 引入Spring AOP相关jar包
  • 在bean.xml中配置事务管理器类
  • 配置事务增强(拦截需要事务控制的方法)
  • 核心配置示例:

    2.2 注解方式实现

    使用注解方式配置事务管理更加简便,只需在需要事务控制的方法上添加@Transactional注解。@Transactional可用于方法或类级别,具体配置如下:

    • @Transactional(readOnly=false, timeout=-1, noRollbackFor=ArithmeticException.class)

    注解配置示例:

    @Servicepublic class DeptService {    @Resource    private DeptDao deptDao;    @Transactional    public void save(Dept dept) {        deptDao.save(dept);    }}

    2.3 事务传播行为

    @Transactional注解支持不同的传播行为:

    • Propagation.REQUIRED:当前方法必须在已有事务中执行
    • Propagation.REQUIRED_NEW:当前方法必须在新事务中执行

    示例:

    @Transactional(propagation = Propagation.REQUIRED)public void saveDept() {    insertLog();    saveDept();}

    3.Spring与Hibernate整合

    3.1 整合关键点

  • 将Hibernate的SessionFactory交给Spring管理
  • 交给Spring管理的事务控制
  • 配置示例:

    4.SSH整合

    4.1 整合需求

    • JSP页面显示员工信息(查询功能)

    4.2 整合步骤

  • 引入必要的SSH jar包
  • 配置Struts和Spring的整合
  • 配置Hibernate事务控制
  • 核心配置文件:

    4.3 开发流程

  • Entity/Dao/Service/Action层开发
  • 配置Hibernate映射文件
  • 配置Spring的事务管理
  • 通过以上配置,可以实现对Spring与Struts、Hibernate的高效整合,确保应用程序的高性能和可维护性。

    转载地址:http://lwayz.baihongyu.com/

    你可能感兴趣的文章
    Netty源码解读
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty相关
    查看>>
    Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
    查看>>
    Network Sniffer and Connection Analyzer
    查看>>
    NetworkX系列教程(11)-graph和其他数据格式转换
    查看>>
    Networkx读取军械调查-ITN综合传输网络?/读取GML文件
    查看>>
    Net与Flex入门
    查看>>
    net包之IPConn
    查看>>
    NFinal学习笔记 02—NFinalBuild
    查看>>
    NFS共享文件系统搭建
    查看>>
    nfs复习
    查看>>
    NFS网络文件系统
    查看>>
    ng 指令的自定义、使用
    查看>>
    nginx + etcd 动态负载均衡实践(二)—— 组件安装
    查看>>
    nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
    查看>>
    Nginx + Spring Boot 实现负载均衡
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx - Header详解
    查看>>
    Nginx Location配置总结
    查看>>