spring配置c3p0连接池、spring的声明式事务管理
一、spring配置c3p0连接池:
1、导入maven依赖:
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version>
</dependency>
2、在spring配置文件中配置连接池:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- spring配置c3p0连接池 start --><!-- 1.配置连接池 --><!-- 1.1创建连接池对象,dataSource的名字不能改变 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 1.2设置连接池的属性 --><property name="driverClass" value="com.mysql/jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql:///test-ssm"></property><property name="user" value="root"></property><property name="password" value="admin"></property></bean><!-- 2.创建jdbcTemplate对象,并注入连接池对象 --><bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!-- 3.创建userDao对象,并注入jdbctemplate对象 --><bean id="userDao" class="com.zwp.dao.UserDao"><property name="jdbcTemplate" ref="jdbctemplate"></property></bean><!-- 4.创建userService对象,并注入userDao对象 --><bean id="userService" class="com.zwp.service.UserService"><property name="userDao" ref="userDao"></property></bean><!-- spring配置c3p0连接池 end -->
</beans>
3、相关类的代码:
public class UserDao {private JdbcTemplate jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void add(){System.out.println("UserDao调用JdbcTemplate..");String sql="insert into user values(?,?)";jdbcTemplate.update(sql,"小张","666");}
}
public class UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void add(){System.out.println("service调用dao...");userDao.add();}
}
4、测试类:
public class Test2 {@Testpublic void test6(){ApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");UserService userService = (UserService) context.getBean("userService");System.out.println("调用service...");userService.add();}
}
5、运行结果:
二、spring的声明式事务管理:
spring的声明式事务管理有两种实现:
(1)基于xml配置文件的实现;
(2)基于注解方式的实现;
1、基于xml配置文件实现:
步骤:第一步:配置连接池;
第二步:配置事务管理器;
第三步:配置事务增强;
第四步:配置切面;
spring配置文件配置如下:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- 声明式事务管理-基于xml配置文件实现start --><!-- 1.配置连接池 --><!-- 1.1创建连接池对象 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 1.2设置连接池的属性 --><property name="driverClass" value="com.mysql/jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql:///test-ssm"></property><property name="user" value="root"></property><property name="password" value="admin"></property></bean><!-- 5.配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 6.配置事务增强 --><tx:advice id="txadvice" transaction-manager="transactionManager"><!-- 6.1 做事务操作 --><tx:attributes><!-- 6.2 设置进行事务操作的方法匹配规则 --><tx:method name="account" propagation="REQUIRED"/></tx:attributes></tx:advice><!-- 7.配置切面 --><aop:config><!-- 7.1 配置切入点 --><aop:pointcut expression="execution(* com.zwp.service.UserService.*(..))" id="pointcut1"/><!-- 7.2 配置切面 --><aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/></aop:config> <!-- 声明式事务管理-基于xml配置文件实现end -->
</beans>
public class UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void account(){//小明增加1000userDao.increase();//出现异常:int i=10/0;//小李减少1000userDao.decrease();}
}
public class Test2 {@Testpublic void test6(){ApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");UserService userService = (UserService) context.getBean("userService");System.out.println("调用service...");userService.account();;}
}
运行结果:在执行account()方法是,出现异常,但是发生异常前的数据库操作没有被保存到数据库,说明配置成功了。
2、基于注解方式的实现:
步骤:第一步:配置连接池;
第二步:配置事务管理器;
第三步:开启事务注解;
第四步:在要使用事务的方法所在类上面添加注解@Transactional。
spring配置文件配置如下:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- spring配置c3p0连接池 start --><!-- 1.配置连接池 --><!-- 1.1创建连接池对象 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 1.2设置连接池的属性 --><property name="driverClass" value="com.mysql/jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql:///test-ssm"></property><property name="user" value="root"></property><property name="password" value="admin"></property></bean><!-- spring配置c3p0连接池 end --><!-- 5.配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 开启事务注解 --><tx:annotation-driven transaction-manager="transactionManager"/></beans>
//第四步:在要使用事务的方法所在类上面添加注解@Transactional
@Transactional
public class UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void account(){//小明增加1000userDao.increase();//出现异常:int i=10/0;//小李减少1000userDao.decrease();}
}
spring配置c3p0连接池、spring的声明式事务管理相关推荐
- Spring框架(下)JdbcTemplate、声明式事务管理
Spring框架(下)JdbcTemplate.声明式事务管理 (一)使用JdbcTemplate 1.概述 为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个 ...
- Spring Framework--Data Access(1)--Transaction Management(2) - 声明式事务管理
一.概述 Spring的声明式事务管理是通过Spring的AOP实现的,Spring的事务管理和EJB CMT类似,都可以在方法级别上定义事务行为,不过他们两者也有区别,表现在: (1)EJB CMT ...
- 解决spring配置c3p0连接池,tomcat无法正常启动
为什么80%的码农都做不了架构师?>>> 今天下午收到一名网友的在线求助.先简要描述一下问题的背景: Windows平台,tomcat应用服务器, Oracle数据库,应用架构 ...
- 全面分析 Spring 的编程式事务管理及声明式事务管理(转)
摘要 Spring 的事务管理是 Spring 框架中一个比较重要的知识点,该知识点本身并不复杂,只是由于其比较灵活,导致初学者很难把握.本教程从基础知识开始,详细分析了 Spring 事务管理的使用 ...
- 全面分析 Spring 的编程式事务管理及声明式事务管理--转
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- Spring+Hibernate+c3p0连接池配置-连接无法释放的问题解决方案
1.Spring+Hibernate+c3p0连接池配置: <?xml version="1.0" encoding="UTF-8"?> < ...
- spring 整合c3p0连接池
个人博客:https://suveng.github.io/blog/ Spring 整合C3P0连接池 注意:环境 jdk1.8 ,idea 2018,maven,spring环境 代 ...
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性. spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或 ...
- spring事务配置,声明式事务管理和基于@Transactional注解的使用
事务管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性. spring提供了几个关于事务处理的类: TransactionDefinition //事务属性定义 Transc ...
最新文章
- 1.2 检测和测量图像中的圆形目标
- gSoap的“error LNK2001: 无法解析的外部符号 _namespaces”解决方法
- SAP Business Application Studio和SAP云平台Destination
- HDU2067 小兔的棋盘
- 信号扫描_图文并茂,一文读懂信号源
- AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
- linux安装之后缺少命令,Centos 7 最小安装后关键命令找不到 ifconfig等
- 软件设计师学习3——操作系统知识
- 御剑仙侠服务器维护,御剑修仙放置挂机文字游戏
- Flash 第七章 元件,帧,库管理
- 系统辨识与自适应控制matlab仿真下载,系统辨识与自适应控制MATLAB仿真 全部程序...
- 单个文件如何修改MD5
- windows设置定时任务并运行python脚本(windows任务计划)
- java中的正则表达式_java中的正则表达式
- JavaScript系列-闭包
- 数字人民币红包体验如何?
- 关于领域驱动设计(DDD)的理论知识
- r语言员工离职_使用R机器学习进行员工离职预测系列(一)
- html自动全屏js,js实现简单页面全屏
- 【Linux】一步一步学Linux——Linux系统目录详解(09)
热门文章
- 四十八、使用Python和Stata完成广西碳酸钙企业的主成分分析和因子分析
- 【webpack 中版本兼容性问题错误总结,耽误半天学习】
- 6.29 Vue 第二天 学习笔记
- 三连冠!百度PARL 拿下NeurIPS 2020电网调度竞赛双赛道冠军
- CVPR 2019 | 旷视研究院提出极轻量级年龄估计模型C3AE
- 关于大家对Swin Transformer的魔改论文模型记录(只关注Swin是如何使用的)
- isulad代替docker_云原生时代的华为新“引擎”:iSula | Linux 中国
- 【Linux部署】Greenplum数据库6.13.0单机版【重启实录】(5次报错问题及解决的避坑指南+日志文件查看方法)
- opengl游戏引擎源码_跨平台渲染引擎之路:拨云见日
- vue 初始化方法_Vue源码解读(一)引入Vue做了什么