spring配置事务管理

spring中提供了对事务管理的封装,可以通过xml配置文件配置,或者注解配置

模拟一个用户转账的过程

1.导入相应的jar包

2.关于dao中代码

package com.lee.dao;

import org.springframework.jdbc.core.JdbcTemplate;

public class UserDao {
	//封装的jdbc模板通过spring配置文件创建
	private JdbcTemplate jdbcTemplate;
	
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	//用户a减100的方法
	public void lessMoney(){
		String sql = "update user set money = money - ? where userid = ?";
		int num = jdbcTemplate.update(sql,100,"admin");
		System.out.println(num + "===========");
	}
	
	//用户b加100的方法
	public void addMoney(){
		String sql = "update user set money = money + ? where userid = ?";
		int num = jdbcTemplate.update(sql,100,"root");
		System.out.println(num + "===========");
	}
}

3.关于service代码

package com.lee.service;


import com.lee.dao.UserDao;

public class UserService {
	private UserDao userDao;

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	
	//模拟转账过程
	public void countMoney(){
		//调用用户a减100的方法
		userDao.lessMoney();
		
		int num = 100 / 0; //让后面的操作不执行
		
		//调用用户b加100的方法
		userDao.addMoney();
	}
}
在service中,执行转账过程中,模拟了一个出现异常的情况。

4.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:tx="http://www.springframework.org/schema/tx"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
                  http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
                  http://www.springframework.org/schema/context  
                  http://www.springframework.org/schema/context/spring-context-3.2.xsd  
                  http://www.springframework.org/schema/aop   
                  http://www.springframework.org/schema/aop/spring-aop.xsd        
                 http://www.springframework.org/schema/tx   
                 http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> 
	
	<!-- 配置c3p0 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"/>
		<property name="jdbcUrl" value="jdbc:mysql:///sun" />
		<property name="user" value="root" />
		<property name="password" value="sunshine" />
	</bean>
	
	<bean id="userDao" class="com.lee.dao.UserDao">
		<!-- userDao通过jdbc模板操作数据库 -->
		<property name="jdbcTemplate" ref="jdbcTemplate" />
	</bean>	
	<bean id="userService" class="com.lee.service.UserService">
		<property name="userDao" ref="userDao" />
	</bean>	
	
	<!-- 配置jdbc模板 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!-- 有参构造方法中调用了setDataSource方法 ,把c3p0的到dataSource传进去-->
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 注入数据源,指定了事务管理器对哪一个数据库的操作 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<!-- 配置事务增强(用AOP形式增强到需要用事务的方法中) -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 事务的匹配规则,针对哪一个方法增加事务 ,count*代表以count开头的方法都增加事务-->
			<tx:method name="count*"/>
		</tx:attributes>
	</tx:advice>
	
	<!-- 配置AOP -->
	<aop:config>
		<!-- 切入点,在那个地方用增强 -->
		<aop:pointcut expression="execution(* com.lee.service.UserService.*(..))" id="pointCut"/>
		<!-- 切面 ,把增强用到切入点上-->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
	</aop:config>
	
</beans>
关于事务管理器,spring对不同的持久化框架有不同的接口实现



以上就利用XML配置文件形式配置好了事务。运行代码,中间出现了错误,事务回滚,数据库未改变。


5.利用注解形式配置事务

XML中关于事务的配置:

	<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<!-- 开起事务管理器注解扫描 (指定事务管理器)-->
	<tx:annotation-driven transaction-manager="transactionManager"/>
在需要用到事务的类上方添加注解

@Transactional
这样在此类中的方法都添加了事务操作。





内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值