依赖:spring-context,spring-jdbc(这个本身有依赖spring-tx,关于事务的),druid,mysql-connector-java,aspectjweaver五个

由于我是在dao层的实现类中直接使用JdbcTemplate属性进行一些简单的测试,所以

配置文件:仍然是先写一个DruidDataSource的bean,

在JdbcTemplate的bean下,添加DruidDataSource的引用,然后配置dao和service。

事务配置:

1.DataSourceTrancetionManager(全称org.springframework.jdbc.datasource.DataSourceTransactionManager)的<bean>,配置dataSource属性。

关于这个bean的id有一个注意的地方,下面2中的transaction-manager的默认值为"transactionManager",因此如果该bean的id为这个,下面2中的属性可以不

写,默认值就是,会直接找的。

2.<tx:advice>,它导入的xmlns是以tx结尾的,别弄错了。例子:

  1. <tx:advice id="txAdvisor" transaction-manager="txManager">
  2. <tx:attributes>
  3. <tx:method name="get*" read-only="true" />
  4. <tx:method name="*" propagation="REQUIRED" rollback-for="com.dao.MyCheckEx"/>
  5. </tx:attributes>
  6. </tx:advice>
  7. <!--
  8. tx:advice的事务管理器设置:
  9. 如果你配置的事务管理器的名字就叫做transactionManager,
  10. 那么transaction-manager就可以不用设置
  11. 可以配置多个method,一般的配置,查询操作用只读事务,会优化性能
  12. 它也支持通配符*
  13.  
  14. 默认情况下,spring会对运行时异常产生回滚,检查异常不回滚
  15. 如果想针对检查异常也回滚,那么就需要配置rollback-for
  16.  
  17. mybatis这种持久层框架,其所有数据库操作的异常都是运行时异常
  18. 所以method的rollback-for保留默认即可,不需要额外配置
  19.  
  20. 事务传播:transaction propogation:主要指的是先前的事务信息
  21. -->

  最后关于<aop>的配置,今天练习的时候出了一个坑,自己半天没发现,我在<aop:pointcut>中配置表达式,测试回滚的时候一直失败。怀疑是rollback-for的配置有问题,改了半天代码,最后突然想起来会不会是表达式写错了,一检查才发现指向的不是进行回滚测试方法的那个类——删除员工表数据和删除部门表数据,先删员工后删部门,这两个删除方法是另外写一个类的方法中调用的,本来表达式应该指向这个类的这个方法,但是我指向了单独的删除部门的方法。

另外今天有用到parent这个属性,忘记怎么写了——在要继承别的<bean>的bean上写上parent属性,关于这个父类bean,它如果是抽象类之类的,就不要写class了,并且加上abstract=“true”防止getBean。

今天还有一个错误,如果aop表达式写错,找不到目标的话,会报一个错,忘记记录了,总的来说就是总是说你的第一个<bean>找不到。

spring和mybatis的事务整合直接上xml文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mybatis="http://mybatis.org/schema/mybatis-spring" xmlns:tx="http://www.springframework.org/schema/tx"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
  8.  
  9. <context:property-placeholder location="classpath:db.properties" local-override="true"></context:property-placeholder>
  10. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  11. <property name="username" value="${mysql.username}"></property>
  12. <property name="password" value="${mysql.password}"></property>
  13. <property name="url" value="${mysql.url}"></property>
  14. </bean>
  15.  
  16. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  17. <property name="dataSource" ref="dataSource"></property>
  18. <property name="mapperLocations" value="classpath*:*Mapper.xml"></property>
  19. <property name="configuration">
  20. <bean class="org.apache.ibatis.session.Configuration">
  21. <property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"></property>
  22. </bean>
  23. </property>
  24. <property name="plugins">
  25. <list>
  26. <bean class="com.github.pagehelper.PageInterceptor">
  27. <property name="properties">
  28. <props>
  29. <prop key="supportMethodsArguments">true</prop>
  30. </props>
  31. </property>
  32. </bean>
  33. </list>
  34. </property>
  35. </bean>
  36.  
  37. <mybatis:scan base-package="com.zyl.paging.dao"></mybatis:scan>
  38.  
  39. <bean id="deptServiceImpl" class="com.zyl.paging.service.impl.DeptServiceImpl" autowire="byType"></bean>
  40. <bean id="deptBackupServiceImpl" class="com.zyl.paging.service.impl.DeptBackupServiceImpl" autowire="byType"></bean>
  41.  
  42. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  43. <property name="dataSource" ref="dataSource"></property>
  44. </bean>
  45.  
  46. <tx:advice id="txAdvisor">
  47. <tx:attributes>
  48. <tx:method name="get*" read-only="true"/>
  49. <tx:method name="*"/>
  50. </tx:attributes>
  51. </tx:advice>
  52.  
  53. <aop:config>
  54. <aop:pointcut id="myPointcut" expression="execution(* com..service.impl.*.*(..))"></aop:pointcut>
  55. <aop:advisor advice-ref="txAdvisor" pointcut-ref="myPointcut"></aop:advisor>
  56. </aop:config>
  57. </beans>

复习的时候对web.xml中的3个配置产生了疑惑:

1.classpath和classpath*的区别:

classpath:只会到你指定的class路径中查找文件;

classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

2.配置的<context-param>中<param-name>contextConfigLocation</param-name>中的值是不是不能改:不能改

3.<listener>有什么用?注释后,在java代码getBean处会发生错误,ContextLoaderLitener实现了ServletContextListner,在servlet加载和销毁的时候会自动调用相应的方法。

4.<filter>中的<init-param>的<param-name>的值是不是不能改:不能。进入CharacterEncodingFilter类中,会找到相应的字段和set方法。过滤器中的两个<init-param>缺一不可,不然会中文字符变成?

  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>classpath:applicationContext.xml</param-value>
  4. </context-param>
  5. <listener>
  6. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  7. </listener>
  8.  
  9. <filter>
  10. <filter-name>encoding</filter-name>
  11. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  12.  
  13. <init-param>
  14. <param-name>forceEncoding</param-name>
  15. <param-value>true</param-value>
  16. </init-param>
  17.  
  18. <init-param>
  19. <param-name>encoding</param-name>
  20. <param-value>UTF-8</param-value>
  21. </init-param>
  22. </filter>
  23.  
  24. <filter-mapping>
  25. <filter-name>encoding</filter-name>
  26. <url-pattern>/*</url-pattern>
  27. </filter-mapping>

  

 

spring第9天(事务)的更多相关文章

  1. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  2. 全面分析 Spring 的编程式事务管理及声明式事务管理

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  3. spring aop 声明式事务管理

    一.声明式事务管理的概括 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一. Spring的声明式事务顾名思义就是采用声明 ...

  4. Spring 中的 JDBC 事务

    Spring 对 JDBC 的支持 JdbcTemplate 简介 •为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架. • ...

  5. Spring中的Jdbc事务管理

    Spring提供了对事务的声明式事务管理,只需要在配置文件中做一些配置,即可把操作纳入到事务管理当中,解除了和代码的耦合. Spring声明式事务管理,核心实现就是基于Aop. Spring声明式事务 ...

  6. Spring的声明试事务

    1 在配置文件中加入: <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.spring ...

  7. spring的annotation-driven配置事务管理器详解

    http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html ——————————————————————————————————————————————— ...

  8. 全面分析 Spring 的编程式事务管理及声明式事务管理--转

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  9. Spring使用注解进行事务的管理

    使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/ ...

  10. Spring之声明式事务

    在讲声明式事务之前,先回顾一下基本的编程式事务 编程式事务: //1.获取Connection对象 Connection conn = JDBCUtils.getConnection(); try { ...

随机推荐

  1. 微软结合Veritas,使用Azure云中的混合存储

    导读 在与Symantec(Symantec)脱离10年(通常令人不愉快的关系)一周年之际,Veritas Technologies在2月22日宣布与Microsoft Corp. 建立了多年战略全球 ...

  2. MySQL部分语法

    MySQL 1.先进入到d盘根目录(自己安装MySQL的盘符) cd d:\2.输入net start mysql3.在d盘的根目录下输入mysql -u root -p就可以进入mysql的命令提示 ...

  3. Socket传输大文件(发送与接收)

    下载 Client using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...

  4. Ubuntu18.04 ElasticSearch7.3.2集群搭建(一)

    集群规划: Hostname Elasticsearch Kibana Marvel Marvel Client node01 √ √ √ √ node02 √ √ node03 √ √ node04 ...

  5. vue 父组件向子组件传参(笔记)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. logback日志

    一.什么是日志框架? 是一套能够实现日志输出的工具包 能够描述系统运行状态的所有时间都可以算作日志 用户下线,接口超时,数据崩溃 二.日志框架的能力 1.定制输出目标(文件,回滚策略,数据库,网络的第 ...

  7. Myeclipse项目出现红叉解决方案

    1.右键点击你的项目.选中properties 2.选中MyEclipse下的Project Facets里面的java 此时的版本号为1.5,修改 3.选中MyEclipse下的Project Fa ...

  8. 吴裕雄--天生自然JAVAIO操作学习笔记:File类

    import java.io.File ; import java.io.IOException ; public class FileDemo01{ public static void main( ...

  9. spring bean容器学习

    bean是Spring种最核心的东西 ,如果说Spring是个水桶的话,bean就是桶里面的水,桶里面没有水也就没有意义了. public class MyTestBean { private Str ...

  10. 最新获取 QQ头像 和 昵称接口

    网上找来的测试可用... 获取QQ头像 http://q2.qlogo.cn/headimg_dl?bs=QQ号&dst_uin=QQ号&dst_uin=QQ号&;dst_ui ...