当前位置: 首页 > news >正文

Spring 编程式事务管理实现

Spring 支持事务管理,有两种方式,编程式事务管理和声明式事务管理,下面介绍编程式事务管理。

编程式事务管理实现步骤:

1.在spring 配置文件中声明数据源

     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://xxx.xx.xx:3306/mytest?useSSL=false&amp;serverTimezone=Asia/Shanghai"></property>
		<property name="username" value="root"></property>
		<property name="password" value="********"></property>
	</bean>

2.在spring 配置文件中声明事务管理类

    
     <bean id="transcationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

使用原生的jdbc 操作,这样当中间出现异常的时候,数据会出现相应的回滚,需要注意的是这里需要设置:conn.setAutoCommit(false);

	@Override
	public void tranfMoeny(String money, String fromname, String targetName) {
		TransactionDefinition define = new DefaultTransactionDefinition();// 初始化事务
		TransactionStatus tstatus = transcationManager.getTransaction(define);//
		Connection conn = null;
		try {
			
			conn = this.dataSource.getConnection();
			conn.setAutoCommit(false);
			Statement ment = conn.createStatement();
			String sql_sub = "update t_account set money=money-" + money + " where username=\'" + fromname + "\'";
			ment.execute(sql_sub);
			Integer.parseInt("jjf");
			String sql_add = "update t_account set money=money+" + money + " where username=\'" + targetName + "\'";
		    ment.execute(sql_add);
			transcationManager.commit(tstatus);
		} catch (Exception e) {
			transcationManager.rollback(tstatus);
			e.printStackTrace();
		}
	}

不用原生的jdbc ,使用jdbcTemplate 进行事务操作,需要在配置文件中首先配置jdbc模板

	  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	 </bean>

下面使用jdbcTemplate来进行实现:


	@Override
	public void tranfMoeny(String money, String fromname, String targetName) {
		TransactionDefinition define = new DefaultTransactionDefinition();// 初始化事务
		TransactionStatus tstatus = transcationManager.getTransaction(define);//
		try {
			String sql_sub = "update t_account set money=money-" + money + " where username=\'" + fromname + "\'";
			jdbcTemplate.execute(sql_sub);
			Integer.parseInt("jjf");
			String sql_add = "update t_account set money=money+" + money + " where username=\'" + targetName + "\'";
		    jdbcTemplate.execute(sql_add);
			transcationManager.commit(tstatus);
		} catch (Exception e) {
			transcationManager.rollback(tstatus);
			e.printStackTrace();
		}
	}

上面就是通过代码实现Spring 的编程式事务管理,分为使用jdbcTemplate和不使用jdbcTemplate 两种方式,

希望对你有所帮助!

相关文章:

  • Redis 服务器:核心功能与优化实践
  • 深入解析Java面向对象三大特征之多态、final、抽象类与接口
  • 【芯片验证】面试题·对深度为60的数组进行复杂约束的技巧
  • DeepSeek-R1学习
  • AD绘图基本操作
  • 面试系列|蚂蚁金服技术面【3】
  • Hessian 矩阵是什么
  • C++ STL 之常用拷贝和替换算法①copy();②replace();③replace_if();④swap();
  • 【操作系统】Ch5 存储管理
  • 行为模式---访问者模式
  • 实战:自适应均衡的设计与实现
  • SOC与电压的关系
  • 谈谈你对前端工程化的理解,它包含哪些方面
  • Linux目录理解
  • MySQL-基础篇
  • docker 安装mysql
  • 网络安全 --- 基于网络安全的 Linux 最敏感目录及文件利用指南
  • 有趣的算法实践:整数反转与回文检测(Java实现)
  • 数据挖掘导论——第七章:聚类
  • 如何通过用户分群优化应用用户体验
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆
  • 支持企业增强战略敏捷更好发展,上海市领导密集走访外贸外资企业
  • 高适配算力、行业大模型与智能体平台重塑工业城市
  • 某博主遭勒索后自杀系自导自演,成都警方立案调查
  • 做街坊们的“健康管家”,她把专科护理服务送上门
  • 印称一名高级官员在巴基斯坦发动的袭击中死亡