5.spring-transactionManager事务管理的xml配置

news/2024/11/12 11:37:09

在这里插入图片描述
三个步骤:①配置哪种事务管理器JDBC的?JPA的?还是Hibnate的。 ②配置通知。③配置切点并关联通知

一、配置事务管理器
在Bean配置文件中配置事务管理器transactionManager,并注入数据源。

<!-- 配置事务管理器 -->
<bean id="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>

二、 配置 通知
1.需要先导入 tx 命名空间。
2.使用tx:advice元素声明事务通知,需要指定id属性,以便AOP把通知和切入点关联起来。
3.还需要指定transaction-manager属性,其值Bean配置文件中事务管理器的id属性值。
4.tx:attributes元素,用于指定事务属性。
5.在tx:attributes元素下可以使用多个tx:method元素指定多种事务属性。
name:切点方法名称
isolation:事务的隔离级别
propogation:事务的传播行为
timeout:超时时间
read-only:是否只读

<!-- 配置 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<!-- 根据方法名指定事务的属性  -->
		<tx:method name="BookShopXmlService" propagation="REQUIRED"/>
		<tx:method name="get*" read-only="true"/>
		<tx:method name="find*" read-only="true"/>
		<tx:method name="*"/>
	</tx:attributes>
</tx:advice>

三、配置切点,并把事务切点与事务通知关联起来
1.在 aop:config元素下,使用aop:pointcut元素声明切入点,其expression属性指定切入点表达式,还需要指定id属性。
2.在 在aop:config元素下,使用aop:advisor元素声明一个增强器,将事务通知和切入点关联起来,使用 advice-ref属性指定事务通知,用pointcut-ref属性指定切入点。

<!-- 配置事务切点,以及把事务切入点和事务属性关联起来 -->
<aop:config>
	<aop:pointcut expression="execution(* com.sqp.spring.service.*.*(..))"
		id="txPointcut"/>
	<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>

http://www.niftyadmin.cn/n/4557429.html

相关文章

vue3中的事件等

子组件触发父组件事件 子组件代码 &#xff1a; // ChildComponent.vue <template><button click"emitEvent">Click me</button> </template><script setup> import { ref } from vue;const emitEvent () > {emit(childEvent); …

谁知道 c语言问题:求100-300之间的素数

count);getch();} i);count;break;}printf("总共有素数%d个" count0;for(i100;i<300;i)for(j2;j<sqrt(i);j)if(i%j0)break;else{ printf("%d是素数./n" j count); getch();} 答案补充 加一句就好了.#include <stdio.h>#include <math.h>…

6.spring-aop面向切面编程

1.AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意思为面向切面编程。 2.AOP 是 OOP 的延续&#xff0c;并且AOP不是spring框架所特有的。 3.AOP面向切面的作用&#xff1a;在程序运行期间&#xff0c;在不修改源码的情况下对方法进行功能增强 实际上&#xff0c;AOP…

我似乎不能成功定义一个链表。我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息。难道在C语言中一个结构不能包

函数&#xff09;都要先声明再使用所以楼上说的就是这个原因 在未定义NODEPTR前使用NODEPTR.typedef struct node { char item[100]; struct node *next; } *NODEPTR; ||| c中的结构是可以包结构的c中的所有语句&#xff08;变量

7.html原生js:穿梭框,左右框添加数据

原理就是&#xff0c;有两个select框和两个点击按钮。向右→添加时&#xff0c;获取左边option的选中状态&#xff0c;所有选中的option加到右边去 效果图&#xff1a; 可复制代码&#xff0c;直接运行 <div style"border:1px solid #ccc;margin-top:10px;padding:1…

mysql 插入百万条数据

利用mysql内存表插入速度快的特点&#xff0c;先存储过程在内存表中生成数据&#xff0c;然后再从内存表插入普通表中 一.创建内存表 CREATE TABLE vote_record_memory ( id INT (11) NOT NULL AUTO_INCREMENT, name VARCHAR (50) NOT NULL,pwd VARCHAR(32) NOT NULL,create_ti…

C++网络编程是什么....

用它来构造你想要构造的事件 用语言构成了一个世界或者描述了一个事件C同样是一种语言 就像你写作文

8.jsp前端页面的理解:分页、筛选

jsp页面刷新只是改了页码和筛选条件而已: 1.第一次访问还是点击下一页时&#xff0c;肯定是request.getParameter获取所有需要的参数&#xff0c;比如当前页码&#xff0c;重要的筛选条件。 //如果是第一次访问&#xff0c;那么很多参数默认为空&#xff0c;那就作一点处理就…