8 -- 深入使用Spring -- 6...3 使用@Transactional

      8.6.3 使用@Transactional

        Spring还允许将事务配置放在Java类中定义,这需要借助于@Transactional注解,该注解即可用于修饰Spring Bean类,也可用于修饰Bean类中的某个方法。

        如果使用@Transaction修饰Bean类,则表明这些事务设置对整个Bean类起作用;若果使用@Transactional修饰Bean类的某个方法,则表明这些事务设置只对该方法有效。

        使用@Transactional时可指定如下属性:

        ⊙ isolation : 用于指定事务的隔离级别。默认为底层事务的隔离级别。

        ⊙ noRollbackFor : 指定遇到特定异常时强制不会滚事务。

        ⊙ noRollbackForClassName : 指定遇到特定的多个异常时强制不会滚事务。该属性值可以指定多个异常类名。

        ⊙ propagation : 指定事务传播行为。

        ⊙ readOnly : 指定事务是否只读。

        ⊙ rollbackFor : 指定遇到特定异常时强制回滚事务。

        ⊙ rollbackForClassName : 指定遇到特定的多个异常时强制回滚事务。该属性值可以指定多个异常类名。

        ⊙ timeout : 指定事务的超时时长。

package edu.pri.lime._8_6_3.dao;

import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

public class NewsDaoImpl implements NewsDao {

    @Override
    @Transactional(propagation=Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=5)
    public void insert(String title, String content) {
        
    }

}

        还需要让Spring根据注解来配置事务代理,所以还需要在Spring配置文件中增加如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 -->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">


    <!-- 扫描Spring的组件 -->
    <context:component-scan base-package="edu.pri.lime._8_6_2.dao"/>
    
    <!-- 定义数据源Bean,使用C3P0数据源实现,并注入数据源的必要信息 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost/spring"/>
        <property name="user" value="root"/>
        <property name="password" value="System"/>
        <property name="maxPoolSize" value="40"/>
        <property name="minPoolSize" value="2"/>
        <property name="initialPoolSize" value="2"/>
        <property name="maxIdleTime" value="30"/>
    </bean>
    
    <!-- 配置JDBC数据源的局部事务管理器,使用DataSourceTransactionManager类 -->
    <!-- 该类实现了PlatformTransactionManager接口,是针对采用数据源连接的特定实现 -->
    <!-- 配置DataSourceTransactionmanager时需要依赖注入DataSource的引用 -->
    <bean id="transactionManager" class="org.spring.framework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 根据Annotation来生成事务代理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>    
</beans>

啦啦啦

啦啦啦

posted @ 2017-03-27 23:00  limeOracle  阅读(289)  评论(0编辑  收藏  举报