spring配置c3p0连接池、spring的声明式事务管理

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.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-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://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 {
	@Test
	public void test6(){
		ApplicationContext context=
				new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
		
		UserService userService = (UserService) context.getBean("userService");
		System.out.println("调用service...");
		userService.add();
	}
}

5、运行结果:

spring配置c3p0连接池、spring的声明式事务管理

二、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.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-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://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(){
		//小明增加1000
		userDao.increase();
		
		//出现异常:
		int i=10/0;
		
		//小李减少1000
		userDao.decrease();
	}
}
public class Test2 {

	@Test
	public 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.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-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://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(){
		//小明增加1000
		userDao.increase();
		
		//出现异常:
		int i=10/0;
		
		//小李减少1000
		userDao.decrease();
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114730.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js获取url链接中的域名部分

    js获取url链接中的域名部分

    2021年10月30日
    51
  • 基于卷积神经网络的人脸识别[通俗易懂]

    基于卷积神经网络的人脸识别[通俗易懂]基于卷积神经网络的人脸识别的实现利用opencv获取人脸,采集人脸数据,将收集到的人脸数据加载到内存,搭建属于自己的卷积神经网络,并用人脸数据训练自己的网络,将训练好的网络保存成模型,最后再用opencv获取实时人脸用先前训练好的模型来识别人脸。1.前言随着社会的不断进步以及各方面对于快速有效的自动身份验证的迫切要求,生物特征识别技术在近几十年得到了飞速的发展。作为人的一种内在属性,并且具有…

    2022年6月5日
    36
  • 局部静态变量的定义_C语言强制转换数据类型

    局部静态变量的定义_C语言强制转换数据类型C语言中定义的静态变量存放在栈区,动态分配的内存空间位于堆区。这题答案为F为大家科普一下知识C语言中局部变量存在栈里,全局变量存静态存储区。局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;…

    2022年10月30日
    0
  • C语言实现约分最简分式[通俗易懂]

    C语言实现约分最简分式[通俗易懂]题目要求:分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。输入格式:输入在一行中给出一个分数,分子和分母中间以斜杠/分隔,如:12/34表示34分之12。…

    2022年10月25日
    0
  • 活期存款利息的计算方法包括_活期存款计算利息天数

    活期存款利息的计算方法包括_活期存款计算利息天数因为活期存款的利息很低,所以,人们对活期存款的利息怎样计算,并不是十分在意。我也如是。可是前些日子我陪一位老同事去买国债,在回家的路上我们偶尔谈到了这个问题,有些问题我也不太明白。但是,我还是想把这个

    2022年8月4日
    1
  • linux 虚拟化技术(主流虚拟化技术)

    虚拟化技术的方法,架构和实现概览级别:中级M.TimJones[mtj@mtjones.com],顾问工程师,Emulex原文:VirtualLinux译:赵珂cn.zhaoke.comhttp://blog.zhaoke.com/45.html2006年12月29日虚拟化技术的应用十分广泛.当前虚拟化技术主要关注于服务器的虚拟化,…

    2022年4月14日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号