Spring事务的配置

Spring基于XML方式配置事务 配置步骤 一、配置事务管理器 在Bean配置文件中配置事务管理器。 需要注入数据源。 举个例子: <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 阅读详情

个人不太喜欢用注解的方式,觉得用xml简单明了也便于修改。也可能是能力有限吧初学者

附上个人练习DEMO

2个接口及其实现,写得比较渣

package behavior;

import java.util.List;

public interface moreBehavior {
	 void buySome(String username,List<String> bookid);
}

package behavior;

public interface oneBehavior {
	 int checkBookMoney(String id);
	 int checkPersonMoney(String username);
	 int checkBookHave(String id);
	 void buyOne(String id,String username);
}

package behaviorImp;

import java.util.List;

import behavior.moreBehavior;
import behavior.oneBehavior;

public class moreBehaviorImp implements moreBehavior {
	private oneBehavior ob;
	public void setOb(oneBehavior ob) {
		this.ob = ob;
	}
	public void buySome(String username, List<String> bookid) {
		for(String id:bookid){
			ob.buyOne(id, username);
		}	
	}

}
package behaviorImp;

import org.springframework.jdbc.core.JdbcTemplate;

import behavior.oneBehavior;

public class oneBehaviorImp implements oneBehavior {
	private JdbcTemplate jdbcTemplate;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	public int checkBookMoney(String id) {
		String sql = "select sale from book where id = ?";
		return jdbcTemplate.queryForInt(sql,id);
	}

	public int checkPersonMoney(String username) {
		// TODO Auto-generated method stub
		String sql = "select money from buyer where name = ?";
		int result  = jdbcTemplate.queryForInt(sql,username);
		System.out.println(result);
		return result;
	}

	public int checkBookHave(String id) {
		String sql = "select have from book where id = ?";
		return jdbcTemplate.queryForInt(sql,id);
	}

	public void buyOne(String id, String username) {
		if(checkBookHave(id)<=0){
			throw new RuntimeException("没有书了");
		}else if(checkPersonMoney(username)<checkBookMoney(id)){
			throw new RuntimeException("余额不足");
		}else{
			String sql = "update book set have = have -1 where id = ?";
			jdbcTemplate.update(sql,id);
			sql = "update buyer set money = money - ? where name = ?";
			jdbcTemplate.update(sql,checkBookMoney(id),username);			
		}
	}

}
以下附上XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"    
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		 http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
		">
	
		<!-- 导入资源文件 -->
	<context:property-placeholder location="classpath:db.properties"/>
	
	<!-- 配置 C3P0 数据源 -->
	<bean id="dataSource"
		class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="driverClass" value="${jdbc.driverClass}"></property>

		<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
	</bean>
	
	<!-- 配置 Spirng 的 JdbcTemplate -->
	<bean id="jdbcTemplate" 
		class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<bean id="moreBehavior" class="behaviorImp.moreBehaviorImp">
		<property name="ob" ref="oneBehavior"></property>
	</bean>
	<bean id="oneBehavior" class="behaviorImp.oneBehaviorImp">
		<property name="jdbcTemplate" ref="jdbcTemplate"></property>
	</bean>
	
	
	<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<tx:advice transaction-manager="dataSourceTransactionManager" id="ad">
		<tx:attributes>		
			<tx:method name="buyOne" propagation="REQUIRES_NEW"/>	
			<tx:method name="get*" read-only="true"/>
			<tx:method name="*"/>
		</tx:attributes>
	</tx:advice>
	
	<aop:config>
		<aop:pointcut expression="execution(* behavior.*.*(..))" id="pr"/>
		<aop:advisor advice-ref="ad" pointcut-ref="pr"/>
	</aop:config>
	
</beans>



初学Spring,写下来是为了日后回来看看修正修正!欢迎初学者一起交流!
spring 事务管理配置 一般的,我们把事务配在service层,利用service的业务逻辑接口统一的管理。 为什么不用在dao层呢? 因为一个service有可能调用多个dao,而这多个dao有可能相互联系,有时候一个操作需要调用多次数据库,但是这多次调用要么全提交,要么全回滚。  因此,在dao层调用事务理论上说不是一个很明智的选择。应该有业务逻辑层service层负责事务,统一处理。  Spring 阅读详情

相关推荐

Spring 事务相关配置

但是对于编译器异常,Spring事务是不进行回滚的,所以需要使用rollbackFor来设置要回滚的异常。例如methodA方法调用methodB方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。但是对于编译器异常(例如IOException),Spring事务是不进行回滚的。虽然学会了使用Spring回滚事务,但是有一种异常Spring事务默认是不进行回滚的那就是编译器异常。......

流楚丶格念的博客 2912

【Spring】Spring事务配置

Spring事务配置 首先本文主要讲Spring配置事务的三种方式,目录如下: 一、Xml配置方法 二、Xml和注解配置 三、纯注解配置 首先附上需要的一些Java类: /* 学生实体类 */ public class Student implements Serializable { private Integer id; private String name; pri...

renjingjingya0429的博客 599

windows10 + wsl2安装docker

一、安装wsl https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 1.1以管理员身份运行powershell 1.2执行如下命令 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 1.3重启电脑 1.4 重启电脑后,如果需要安装wsl2, 则安装官方文档继续后续操作,因我...

happytree001的博客 1570

spring事务配置的五种方式

https://blog.youkuaiyun.com/m8396017/article/details/51615806 spring事务配置的五种方式 第一种方式:每个Bean都有一个代理 第二种方式:所有Bean共享一个代理基类 第三种方式:使用拦截器 第四种方式:使用tx标签配置的拦截器 第五种方式:全注解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只..

yygr的博客 3843

Matlab/simulink频率响应分析方法

Matlab/Simulink仿真系列问题一.电气模块与信号模块 一.电气模块与信号模块

virtuoso~晓晓 3万+

SMPLify-X关键点映射与OpenPose格式转换实战

本文深入解析了SMPLify-X与OpenPose之间关键点映射与格式转换的实战方法。针对SMPL、SMPL-H、SMPLX等参数化人体模型与OpenPose 2D姿态估计标准之间的数据鸿沟,文章详细对比了双方的关键点定义差异,并提供了核心的Python转换代码与映射表构建思路。通过清晰的步骤讲解与调试技巧,帮助开发者实现3D关节数据到OpenPose标准格式的高效、准确转换,为动作捕捉、3D姿态估计等应用奠定数据基础。

weixin_29046035的博客 166

spring事务配置

spring事务配置spring事务管理需要配置那些beanTransactionManager的配置事务定义切面配置开始显式事务 spring事务管理需要配置那些bean 1、首先需要配置TransactionManager容器。 2、配置事务定义,这里会配置事务的传播行为(propagation)和隔离级别(isolation)。 3、配置AOP来指定管理的模块, 例如service模块。 4...

qq_35627316的博客 217

Python自动化生成HyperMesh Tcl命令流:从几何建模到有限元分析

本文详细介绍了如何利用Python自动化生成HyperMesh的Tcl命令流,实现从几何建模到有限元分析的全流程二次开发。通过封装常用操作函数,工程师可以高效完成参数化建模、自动网格划分及求解器文件输出,显著提升CAE前处理效率与标准化水平。

weixin_29041767的博客 424

在Spring框架中,XML配置事务

它的父bean是。这个bean的目标bean(即被代理的bean)是test。属性定义了事务的属性。在这个例子中,表示这个配置适用于目标bean的所有方法(是一个通配符)。表示这些方法需要在事务中运行,如果当前没有事务,就会创建一个新的事务。表示如果方法执行过程中抛出了异常,那么该异常不会被视为回滚事务的原因。也就是说,即使test的方法在执行过程中抛出了异常,事务仍然会提交,而不是回滚。:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务。这是最常用的设置。

比起日出,我更喜欢日落。我的意思是比起遇见你,我更喜欢与你终老 1304

携程登录风控逆向踩坑实录:从滑块到点选验证码,我是如何一步步拿到phantom-token的

本文详细解析了携程登录风控系统的逆向过程,从滑块验证码到点选验证码的破解,再到设备指纹生成和加密协议逆向,最终成功获取phantom-token。文章提供了关键代码示例和实战技巧,帮助开发者理解并绕过复杂的风控机制。

weixin_28049429的博客 972

STM32+A4988控制步进电机

基于A4988芯片驱动42步进电机,在STM32F1上进行测试,最高可以实现16细分。

个人博客 4万+

spring mvc 事务配置,spring 事务配置说明

新建项目记录下springmvc和spring的事务配置,解决事务不回滚的问题。 问题说明: Spring容器优先加载由ServletContextListener(applicationContext.xml)产生的父容器,而SpringMVC(spring-mvc.xm...

chijunmei7041的博客 172

YOLOv11【第二章:核心模块进阶篇·第28节】DynamicHead动态检测头设计!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 1万+

在Spring中配置Hibernate事务的方法

纵观以上四种在Spring中配置Hibernate事务的方法,其核心都是一样的,不同的只是实现的方式而已。所以看到这,这篇博文中你只需要记住4句话,就可以轻松理解在Spring中配置Hibernate事务的核心: 1.配置SessionFactory 2.配置事务容器 3.配置事务规则 4.配置事务入口 ![在这里插入图片描述]...

weiwjacsdn的博客 1542

SAP Joule Studio 能不能用来开发 skill:可以,但它开发的是 Joule 语境下的企业级 skill,而不是替代所有 SAP 开发技术的万能锤

SAP Joule Studio 专为开发Joule技能(Joule skills)而设计,这些技能是执行确定性单步业务动作的原子能力。它通过自然语言接口连接SAP和非SAP系统,适合处理边界清晰、可审计的任务(如创建工单、查询发票)。Joule技能作为会话式业务编排层,与ABAP、CAP等核心技术互补而非替代。开发支持低代码和专业代码两种方式,并具备企业级治理能力,但需要相应的BTP订阅和技术基础。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 202

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

spring事务xml配置

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.spr...

zhouLucus的博客 382

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring事务——Spring 2.X的事务配置策略

Spring 2.X的事务配置策略     虽然前面介绍的TransactionProxyFactoryBean配置策略简单易懂,但配置起来极为麻烦:每个目标Bean都需要配置一个TransactionProxyFactoryBean代理,这种方式将导致配置文件急剧增加。     Spring 2.X的XMLSchema方式提供了更简洁的事务配置策略,Spring 2.X提供了tx命名

caomiao2006的专栏 1248

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring事务注解配置

一,spring基于注解式的事务配置方法:@Transactional 1.xml配置&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSche...

anyeoo的博客 3298

spring事务属性配置

可以参考文章 可分为注解以及aop两种形式配置 本例子采用spring+mybatis+springmvc+druid 因为涉及到两个数据库,所以配置了两个 数据源(druid)+ sqlSessionFactory + MapperScannerConfigurer +事务管理器 mybatis.xml配置如下 &lt;?xml version="1.0" encoding="UTF-...

sinat_35619327的博客 327

Spring 使用xml配置事务

第一步,创建 xml 文件,并声明xml 命空间: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

hackzfy的博客 664

spring事务配置详解

SPRING的事务配置详解 spring事务配置的两种方式: 1.基于XML的事务配置。2.基于注解方式的事务配置。 前言:在我们详细介绍spring的两种声明式事务管理之前,我们需要先理解这些概念 1)spring的事务管理是通过Aop的方式来实现; 2)声明式事务是spring对事务管理的最常用的方式,因为这种方式对代码的影响最小,因此也就符合非侵入式的轻量级的容器的概念; 3)我们需要理解事务的概念,这里不再给出详细说明。 正文: 1.基于XMl的事务配置 现在假设我们有这样一个接口: package

weixin_44196588的博客 363

spring的事务配置详解

接下来我将给大家介绍spring事务配置的两种方式: 1.基于XML的事务配置。2.基于注解方式的事务配置。 前言:在我们详细介绍spring的两种声明式事务管理之前,我们需要先理解这些概念 1)spring的事务管理是通过Aop的方式来实现; 2)声明式事务是spring对事务管理的最常用的方式,因为这种方式对代码的影响最小,因此也就符合非侵入式的轻量级的容器的概念; 3)我们需要理解

zhaofuwu的博客 2万+

Spring事务配置

1 Spring 事务配置之xml与注解结合版 1.1 pom.xml坐标 <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependenc

m0_46641759的博客 178

在Spring中配置事务

开发环境:JDK1.5(sun)+Myeclipse6.0+Tomcat5.5+ant 1.7.1+MySql5.0.4   框架版本:JSF1.2(sun)+hibernate3.3.1.GA+spring2.5.6   JTA(Java Transaction API)   EJB只支持标准的持久化(JTA)的事务管理,而Spring可以支持大部分流行持久化框架的事务管理。

hbuxzy的专栏 1147
上一篇: Spring利用注解实现5个通知
下一篇: 【转载】C3P0的详细配置说明
SnakeMoving
博客等级 码龄11年 65粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值