Spring事务管理器的配置和使用

来源:互联网 发布:linux下删除ftp用户 编辑:程序博客网 时间:2024/05/29 04:36

                                  Spring事务管理器的配置和使用

1.为什么要配置spring事务管理器。

在将spring和hibernate结合之后,我们需要将事务管理交给spring管理。以保证数据的安全型,避免脏数据的出现。通过spring注入来完成此功能。

步骤1:在spring的配置文件中配置事务管理器

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"></bean>
步骤2:配置完事务管理器,需要给事务管理器加上各种参数。

<!-- 哪些方法需要Spring开启事务transaction-manager="transactionManager":指定事务管理器通知类型:Spring帮我们写好 --><tx:advice transaction-manager="transactionManager" id="txAdvice"><tx:attributes><!--REQUIRED:需要开启事务 rollback-for:抛出哪些异常需要Spring回滚name="save*":以save开头的要开启事务rollback-for:抛出哪类异常(以及子类)的时候,Spring事务回滚,默认是RunTimeException --><tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/><!--其它方法,只能读  --><tx:method name="*" read-only="true"/></tx:attributes></tx:advice>
步骤3:指定那些类执行事务管理器,,可以将事务管理器也理解成一种通知类型。(通知类型可以理解成就是拦截器,配置及使用参照)一般来说都是放在Service层,因为放在Dao层来说,Dao层每次都是执行一条sql成功与否对其他的sql没影响。但是放到Service层当一条sql语句出现错误时,事务回滚

<!-- 配置AOP,目的:哪些类里面的哪些方法执行事务管理器 --> <aop:config> <!-- 定义哪些类执行事务管理器 推荐放到实现类上面(Service)  --> <aop:pointcut expression="execution(* com.bjsxt.*.service.impl.*.*(..))" id="pointcut"/> <!-- 将事务管理器和横切面(pointcut)关联起来 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> </aop:config>
以上三步配置完成之后,运行项目你会发现tomcat会给你报
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in file [F:\workspace\ssh_demo\build\classes\spring\applicationContext_common.xml]: Invocation of init method failed; nested exception is org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]
这段话的意思是说transactionManager我们配置的那个事务管理器找不到DataSource,我们需要将数据源也交给事务管理器

步骤4:配置数据源

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!-- 驱动 --><property name="driverClassName" value="com.mysql.jdbc.Driver"/><!-- url --><property name="url" value="jdbc:mysql://localhost:3306/ssh"/><!-- 用户名 --><property name="username" value="root"/><!-- 密码 --><property name="password" value="199464"/></bean>
开启自动装备之后,开启自动装备transactionManager中的Datasource属性会被自动赋值。
完成以上操作,再执行就可以执行数据库的的增删改的错的了。

0 0
原创粉丝点击