Spring注解方式配置事务

搭建项目

pom文件



    4.0.0
    com.snail.test
    Spring-MVC
    1.0-SNAPSHOT
    war
    
        
            org.projectlombok
            lombok
            ${lombok.version}
        
        
        
            javax.validation
            validation-api
            ${validation-api.version}
        
        
            org.hibernate
            hibernate-validator
            ${hibernate-validator.version}
        
        
        
            junit
            junit
            ${junitversion}
            test
        
        
            org.springframework
            spring-aop
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-aspects
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-beans
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-context
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-context-support
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-core
            ${springversion}
            jar
            compile
        
        
            com.fasterxml.jackson.core
            jackson-core
            2.4.1
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.4.1.1
        
        
            org.springframework
            spring-expression
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-jdbc
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-jms
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-orm
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-oxm
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-tx
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-web
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-webmvc
            ${springversion}
            jar
            compile
        
        
            org.springframework
            spring-test
            ${springversion}
            jar
            compile
        
        
            javax.servlet
            jstl
            1.2
            jar
            compile
        
        
            commons-collections
            commons-collections
            3.1
        
        
            commons-logging
            commons-logging
            1.1
        
        
            commons-dbcp
            commons-dbcp
            1.4
        
        
        
            mysql
            mysql-connector-java
            5.1.12
        
    

    
        UTF-8
        4.1.0.RELEASE
        3.8.1
        1.7
        5.2.4.Final
        1.1.0.Final
        1.14.8
    
    
        
            
                src/main/resources
                true
            
        
        
            
                src/test/resources
                true
            
        
        
            
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    3.1
                    
                        ${project.jdk.version}
                        ${project.build.sourceEncoding}
                        ${project.jdk.version}
                    
                
                
                    org.apache.maven.plugins
                    maven-resources-plugin
                    2.4.3
                    
                        ${project.build.sourceEncoding}
                        
                            
                                dat
                            
                            
                                xls
                            
                            
                                xlsx
                            
                        
                    
                
                
                    org.apache.maven.plugins
                    maven-source-plugin
                    2.2.1
                    
                        true
                    
                    
                        
                            install
                            
                                jar
                            
                        
                    
                
            
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
            
            
                org.apache.maven.plugins
                maven-resources-plugin
            
        
    

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/student
jdbc.username=root
jdbc.password=root

dispatch-servlet






    
    
    
    
    
    

    
    
    
    
    

    
    

web.xml



    hello

    
    
        org.springframework.web.context.ContextLoaderListener
    

    
        contextConfigLocation
        classpath:applicationContext.xml
    

    
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    

    
        CharacterEncodingFilter
        /*
    


    
        dispatcher
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:transaction_dispatcher-servlet.xml
        
        0
    

    
        dispatcher
        /
    

    
        index.jsp
    

service

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;

import java.sql.SQLException;

@Controller
public class UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @RequestMapping("/login")
    @Transactional
    public String login(String userName, String password) throws Exception {
        String sql = "UPDATE student  SET name = ?   WHERE id = ? ";
        jdbcTemplate.update(sql, "111", 2);
        if (isRightUser(userName, password)) {
            sql = "UPDATE student  SET name = ?   WHERE id = ? ";
            jdbcTemplate.update(sql, "222", 2);
            return "success";
        } else {
            return "fail";
        }
    }

    private boolean isRightUser(String userName, String password) throws Exception {
        throw new SQLException();
//        return true;

    }
}

注意点

@Transactional

  • 事务传播行为:PROPAGATION_REQUIRED

  • 事务隔离级别:ISOLATION_DEFAULT

  • 读写事务属性:读/写事务

  • 超时时间:依赖底层事务系统的默认值

  • 回滚设置:任何运行期异常引发回滚,任何检查型异常不会引发回滚

read-only="true"

概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据)

应用场合

  1. 一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性;

  2. 一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。

注意是一次执行多次查询来统计某些信息,这时为了保证数据整体的一致性,要用只读事务

怎样设置:

对于只读查询,可以指定事务类型为readonly,即只读事务。
由于只读事务不存在数据的修改,因此数据库将会为只读事务提供一些优化手段,例如Oracle对于只读事务,不启动回滚段,不记录回滚log。

  1. 注解 @Transactional(readOnly = true)

在将事务设置成只读后,相当于将数据库设置成只读数据库,此时若要进行写的操作,会出现错误。

你可能感兴趣的:(Spring注解方式配置事务)