zoukankan      html  css  js  c++  java
  • 【专访】【Spring常见问题汇总】【05】

    41、事务属性是声明式事务管理5种:

    传播行为:传播行为定义了client与彼调用方法之间的事务边界。

    隔离级别:隔离级别定义了一个事务可能受其它并发事务影响的程度。

    仅仅读:表明事务是否是仅仅读的。

    事务超时:指定事务执行的最长时间,超时就回滚。

    回滚规则:定义了哪些异常会导致事务回滚而哪些不会。

    42、脏读、不可反复读和幻读

    脏读:一个事务读取了还有一个事务改写可是未提交的数据时。假设改写在稍后被回滚了,那么第一个事务获取的数据就是无效的。

    不可反复读:一个事物运行同样的查询两次或者两次以上,可是每次都得到不同的数据。

    一般是由于还有一个并发事务在两次查询期间更新了数据。

    幻读:一个事务读取了几行数据,接着还有一个并发事务插入了一些数据。

    在随后的查询中,第一个事务发现多了一些原本不存在的事务。

    43、Spring事务的7种传播行为

    PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的差别

    它们很 类似,都像一个嵌套事务。假设不存在一个活动的事务。都会开启一个新的事务。使用PROPAGATION_REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样。一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同一时候它须要JTA 事务管理器的支持。

    使用PROPAGATION_NESTED时,外层事务的回滚能够引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚。它是一个真正的嵌套事务。

     

    44、Spring事务的5个隔离级别

    45、spring注讲解明:

    採用扫描的方式 配置Spring XML 书写方式

    <context:component-scanbase-package="这里是包名"/>

    @Service 用于标注业务层组建

    @Controller 用于标注控制层组件

    @Component 泛指组件,用于不明白的类

    @Repository 用户标注数据库訪问组件

    @PostConstruct 创建对象时运行的方法

    @PreDestroy 对象摧毁时运行的方法

    @Autowired 直接訪问私有属性,直接给私有属性输入值。

    @Resource 依据类型注入

    46、Spring mvc工作原理:

    1.spring mvc请全部的请求都提交给DispatcherServlet,它会托付应用系统的其它模块负责负责对请求进行真正的处理工作。

    2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

    3.DispatcherServlet请求提交到目标Controller

    4.Controller进行业务逻辑处理后,会返回一个ModelAndView

    5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

    6.视图对象负责渲染返回给client。

    47、Spring的长处有什么?

    1.  Spring是分层的架构,你能够选择使用你须要的层而不用管不须要的部分

    2.  Spring是POJO(Plain Ordinary Java Object),POJO编程使得可持续构建和可測试能力提高

    3.  依赖注入和IoC使得JDBC操作简单化

    4.  Spring是开源的免费的

    5.  Spring使得对象管理集中化和简单化

    48、spring的事务管理

    spring提供了几个关于事务处理的类:

    TransactionDefinition //事务属性定义

    TranscationStatus //代表了当前的事务。能够提交,回滚。

    PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类比如DataSourceTransactionManager等都是这个类的子类。

    49Spring提供的事务管理

    spring提供的事务管理能够分为两类:编程式实现事务,AOP配置声明式解决方式。编程式的,比較灵活,可是代码量大,存在反复的代码比較多;声明式的比编程式的更灵活。

    编程式实现事务,以下是当中的一种实现方式:

    TransactionTemplate 的 execute() 方法有一个 TransactionCallback 类型的參数,该接口中定义了一个 doInTransaction() 方法,通常我们以匿名内部类的方式实现 TransactionCallback 接口,并在其doInTransaction() 方法中书写业务逻辑代码。这里能够使用默认的事务提交和回滚规则,这样在业务代码中就不须要显式调用不论什么事务管理的 API。

    doInTransaction() 方法有一个TransactionStatus 类型的參数,我们能够在方法的不论什么位置调用该參数的 setRollbackOnly() 方法将事务标识为回滚的。以运行事务回滚。

    依据默认规则,假设在运行回调方法的过程中抛出了未检查异常,或者显式调用了TransacationStatus.setRollbackOnly() 方法,则回滚事务。假设事务运行完毕或者抛出了 checked 类型的异常,则提交事务。

    TransactionCallback 接口有一个子接口 TransactionCallbackWithoutResult,该接口中定义了一个 doInTransactionWithoutResult() 方法,TransactionCallbackWithoutResult 接口主要用于事务过程中不须要返回值的情况。

    当然。对于不须要返回值的情况。我们仍然能够使用TransactionCallback 接口,并在方法中返回随意值就可以。

    声明式事物管理。样例。

    <context:component-scanbase-package="com.chou.spring.jdbc"/>
    <!-- 配置数据源 -->   
    <beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <!-- Connection Info -->
        <property name="driverClass"value="${db.driverClass}" />
        <property name="jdbcUrl"value="${db.url}" />
        <property name="user"value="${db.username}" />
        <property name="password"value="${db.password}" />
           
        <!-- Connection Pooling Info -->
        <propertyname="initialPoolSize" value="1" />
        <property name="minPoolSize"value="1" />
        <property name="maxPoolSize"value="15" />
        <property name="maxIdleTime"value="1800" />
        <property name="maxStatements"value="0" />
    </bean>
    <beanid="jdbcTemplateDao"class="com.chou.spring.jdbc.dao.JdbcTemplateDao" >
        <property name="dataSource"ref="dataSource" />
    </bean>
       
    <!-- JDBC事务管理器 -->
    <beanid="jdbctTxManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource"ref="dataSource" />
    </bean>
    <tx:adviceid="txAdvice" transaction-manager="jdbctTxManager">
        <tx:attributes>
            <tx:methodname="domain*"/>
        </tx:attributes>
    </tx:advice>
       
    <aop:configproxy-target-class="true">
        <aop:advisoradvice-ref="txAdvice"
        pointcut="execution(*com.chou.spring.jdbc.service.JdbcTemplateService.*(..))"/>
    </aop:config>


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    【转】winrar命令行详解
    【转】关于色彩空间sRGB和Adobe RGB...
    深入解读TPC-C指标
    解决因 RsFX devicer 而无法卸载 SQL Server 的问题
    LUHN算法
    信用卡卡号编排的含义
    关于第三方API调用的工具 WebApiClient.JIT 的使用记录
    ocelot.json模板
    C#进阶之事件与委托(Event&Delegate)
    C#进阶之面向对象(OOP)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4856692.html
Copyright © 2011-2022 走看看