`

spring 中的事务小结

阅读更多
  spring中可以使用声明式事务和编程式事务,主要用的比较多的是声明式事务,下面举例子小结一下
   首先在config.xml中定义好datasource和platformtranscationmanager
<!-- 定义DataSource -->

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

..........
            </bean>

    <!-- 定义TransactionManager -->

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

    <!-- 定义BookDao -->

    <bean id="bookDaoTarget" class="example.chapter6.BookDaoImpl">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 封装为事务的BookDao -->

    <bean id="bookDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="target" ref="bookDaoTarget" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <!-- 对以query开头的方法要求只读事务 -->
                <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
                <!-- 对于其他方法要求事务 -->
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>

则使用的代码例子为
ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
        BookDao bookDao = (BookDao)context.getBean("bookDao");
.....//之后的就是
try
{

}catch {}结构,程序中不需要再有处理事务方面的代码了。

    另外,在JAVA 5中,可以用注释来更简单的配置,但要注意的是,必须使用spring 2.0才行
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
>
  。。。。。。其他的和上面的相同,最后加上
<!-- 将所有具有@Transactional注解的Bean自动配置为声明式事务支持 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

然后,对接口使用注释
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface BookDao {

    @Transactional(readOnly=true)
    Book query(String id);

    @Transactional(readOnly=true)
    List<Book> queryAll();

    void insert(Book book);

    void update(Book book);

    void delete(Book book);

}
要注意的是,@transcational的注释只能应用到public方法上

2 集成hiberante事务
   比如用hibernatedaosupport支持DAO,使用spring 2.0的注解,比如

bookdao.java
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface BookDao {

    @Transactional(readOnly=true)
    Book query(String id);

    @Transactional(readOnly=true)
    List<Book> queryAll();

    void insert(Book book);

    void update(Book book);

    void delete(Book book);

}

实体配置代码如下

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity(name="Book")
public class Book {

    private String id;
    private String name;
    private String author;

    @Id
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getAuthor() { return author; }
    public void setAuthor(String author) { this.author = author; }

}
然后其配置代码如下
<!-- 定义SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="annotatedClasses">
            <list>
                <value>example.chapter6.Book</value>
            </list>
        </property>
        <property name="annotatedPackages">
            <list>
                <value>example.chapter6</value>
            </list>
        </property>
     </bean>

     <!-- 定义TransactionManager -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <!-- 定义BookDao -->
    <bean id="bookDao" class="example.chapter6.BookDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <!-- 将所有具有@Transactional注解的Bean自动配置为声明式事务支持 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

分享到:
评论
1 楼 ynial 2008-09-29  
对接口使用注释 好吗?

相关推荐

    spring事务配置的五种方式

    #### 五、小结 本文详细介绍了Spring事务配置的五种方式,并以第一种方式为例进行了具体分析。通过了解这五种配置方式,开发者可以根据项目的实际情况选择最合适的方法来实现事务管理,从而提高系统的稳定性和可靠性...

    Spring笔记和小结

    5. **事务管理**:Spring提供了声明式事务管理,允许开发者通过注解或者配置文件来定义事务边界,从而简化事务处理。 6. **AOP(面向切面编程)**:Spring的AOP模块允许我们在不修改原有业务代码的情况下,对程序...

    Spring框架小结

    在Spring框架中,AOP通过预编译方式或运行时动态代理来实现对程序功能的统一维护,例如事务管理、日志记录、性能监控等。 #### 主要应用场景 - **事务管理**:在业务逻辑中添加事务边界,确保数据一致性。 - **...

    在Spring中使用JTA事务管理

    小结 通过以上步骤,你已经在Spring中成功配置了JTA事务管理。无论是集成JOTM还是引用Tomcat内置的JTA支持,都能实现跨数据库的事务一致性。这在处理分布式系统或多数据源的应用中至关重要,因为它确保了即使在异常...

    Spring 个人小结

    spring 个人小结 ,工厂模式 源码解析 ,AOP ,IOC 隔离事务

    spring学习小结

    【Spring 框架学习小结】 Spring 是一个流行的 Java 应用开发框架,它以其控制反转(Inversion of Control, IOC)和面向切面编程(Aspect-Oriented Programming, AOP)为核心特性,被誉为轻量级框架。下面将详细...

    Spring3.2小结

    Spring可以作为它们之间的胶水,管理各层之间的依赖和事务。例如,通过`@Autowired`注解,Spring可以自动将服务层的bean注入到控制器层,而Hibernate的SessionFactory可以通过Spring的bean配置来管理。 总的来说,...

    spring 学习小结笔记

    通过Spring管理的SessionFactory,我们可以创建Session,执行查询、更新等操作,同时,Spring还提供了事务管理,确保数据操作的原子性和一致性。 在数据库操作中,Spring的JdbcTemplate和...

    Spring-Reference_zh_CN(Spring中文参考手册)

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.6.2.1. 文档视图定义 14.6.2.2. Controller 代码 14.6.2.3. Excel视图子类 14.6.2.4. PDF视图子类 14.7. JasperReports 14.7.1. 依赖...

    Spring攻略PDF版

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring ...

    Spring中文帮助文档

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring攻略(第二版 中文高清版).part1

    13.6 管理集成测试中的事务 530 13.6.1 问题 530 13.6.2 解决方案 530 13.6.3 工作原理 531 13.7 在集成测试中访问数据库 536 13.7.1 问题 536 13.7.2 解决方案 536 13.7.3 工作原理 537 13.8 使用...

    Spring攻略中文版PDF

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring ...

    Spring in Action(第二版 中文高清版).part2

    6.3 在Spring中编写事务 6.4 声明式事务 6.4.1 定义事务参数 6.4.2 代理事务 6.4.3 在Spring 2.0里声明事务 6.4.4 定义注释驱动事务 6.5 小结 第7章 保护Spring 7.1 Spring Security介绍 7.2 验证用户身份...

    Spring编程式和声明式事务实例讲解小结

    本文主要介绍了Spring编程式和声明式事务实例讲解小结,涵盖了Spring事务管理的两种方式:编程式事务管理和声明式事务管理。编程式事务管理通过Transaction Template手动管理事务,而声明式事务管理则通过AOP实现。 ...

    Spring攻略(第二版 中文高清版).part2

    13.6 管理集成测试中的事务 530 13.6.1 问题 530 13.6.2 解决方案 530 13.6.3 工作原理 531 13.7 在集成测试中访问数据库 536 13.7.1 问题 536 13.7.2 解决方案 536 13.7.3 工作原理 537 13.8 使用...

    Spring攻略英文版(附带源码)

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring Security...

    Spring配置的5种方式

    #### 五、小结 Spring框架提供了丰富的事务管理方式,使得开发者可以根据项目需求选择最适合自己的方案。通过本文的介绍,相信读者已经对Spring事务配置的五种方式有了更深入的理解。在实际开发过程中,开发者可...

    Struts2+Hibernate+Spring项目小结――Struts2部分总结

    "educationSelectItemInfos" executeResult="false" /&gt; ...在实际项目中,还需要结合Hibernate进行持久层操作,以及Spring进行依赖注入和事务管理,共同构建出完整的SSH(Struts2 + Hibernate + Spring)企业级应用。

Global site tag (gtag.js) - Google Analytics