`

spring数据库连接及事务应用

    博客分类:
  • ssh2
 
阅读更多
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	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-2.5.xsd
	http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    <!-- 开启注解处理器 -->
    <context:annotation-config/>
	<!-- 定义使用C3P0连接池的数据源 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 指定连接数据库的JDBC驱动 -->
		<property name="driverClass">
		 	<value>com.mysql.jdbc.Driver</value>
		 </property>
		<!-- 连接数据库所用的URL -->
		<property name="jdbcUrl">
			<value>jdbc:mysql://localhost:3306/db_user?useUnicode=true&amp;characterEncoding=gbk</value>
		</property>
		<!-- 连接数据库的用户名 -->
		<property name="user">
			<value>root</value>
		</property>
		<!-- 连接数据库的密码 -->
		<property name="password">
			<value>111111</value>
		</property>
		<!-- 设置数据库连接池的最大连接数 -->
		<property name="maxPoolSize">
			<value>20</value>
		</property>
		<!-- 设置数据库连接池的最小连接数 -->
		<property name="minPoolSize">
			<value>2</value>
		</property>
		<!-- 设置数据库连接池的初始化连接数 -->
		<property name="initialPoolSize">
			<value>2</value>
		</property>
		<!-- 设置数据库连接池的连接的最大空闲时间,单位为秒 -->
		<property name="maxIdleTime">
			<value>20</value>
		</property>
	</bean>
	<!-- 注册一个JDBC数据源事务管理器 -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  	   <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 基于AOP技术的事务管理实现 -->
	<aop:config>
		<!-- 定义一个事务切入点,拦截test.spring.dao.impl.UserDaoImpl中的所有方法 -->
		<aop:pointcut id="transactionPointcut" expression="execution(* test.spring.dao.impl.UserDaoImpl.*(..))"/>
		<!-- 引用txAdvice事务通知 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
	</aop:config>
	<!-- 定义一个事务通知txAdvice -->
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<!-- 所有以load开头的方法声明为不需要事务 -->
			<tx:method name="load*" read-only="true" propagation="NOT_SUPPORTED"/>
			<!-- 其它所有方法声明为默认的REQUIRED类型的事务传播方式 -->
			<tx:method name="*"/>
		</tx:attributes>
	</tx:advice>    	
	<!-- 注册一个JdbcTemplate实例名称为jdbcTemplate -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<constructor-arg ref="dataSource"/>
	</bean>     
	<!-- 注册一个UserDaoImpl实例名称为dao -->
	<bean id="dao" class="test.spring.dao.impl.UserDaoImpl"/>
	<!-- 注册一个UserServiceImpl实例名称为service -->
	<bean id="service" class="test.spring.service.impl.UserServiceImpl"/>
	<!-- 注册一个UserAction实例名称为userAction -->
	<bean id="userAction" class="test.spring.action.UserAction"/>
</beans>

 直接看代码

参考主题:关于spring声明式事务管理异常处理的测试和小结 http://www.iteye.com/topic/34867

<!--
mysql 默认引擎不支持事务,引擎为:MyISAM
修改成:InnoDB

mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。

查看当前数据库的所支持的数据库引擎以及默认数据库引擎

show engines;更改方式1:修改配置文件my.ini

我将my-small.ini另存为my.ini,在[mysqld]最后添加为上default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB

更改方式2:在建表的时候指定或者建完表修改

--建表的时候指定
create table mytbl(
 id int primary key,
 name varchar(50)
)type=MyISAM;

--建完表后修改
alter table mytbl2 type = InnoDB;

--查看修改结果(mytest为表所在的database名字)
show table status from mytest;


 -->

 

 Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚。 
如果一个方法抛出Exception或者Checked异常,Spring事务管理默认不进行回滚。 

二、改变默认方式 
在@Transaction注解中定义noRollbackFor和RollbackFor指定某种异常是否回滚。 
@Transaction(noRollbackFor=RuntimeException.class) 
@Transaction(RollbackFor=Exception.class) 
这样就改变了默认的事务处理方式。 
三、启示 
这就要求我们在自定义异常的时候,让自定义的异常继承自RuntimeException,这样抛出的时候才会被Spring默认的事务处理准确处理。
关于异常的分类一下详细介绍:

0
0
分享到:
评论

相关推荐

    spring连接数据库实例

    同时,项目结构应包含Spring的配置文件(如`applicationContext.xml`)和数据库连接相关的bean定义。此外,确保数据库服务器运行正常,连接参数正确无误。 总结来说,这个"spring连接数据库实例"主要涵盖了Spring...

    spring框架、数据库池连接等之间连接的jar包.rar

    在Spring框架中,数据库连接池是实现高效数据库操作的关键组件,它允许应用程序重复使用已建立的数据库连接,而不是每次都创建新的连接,从而提高了性能和资源利用率。 在Java中,常见的数据库连接池工具有C3P0、...

    Spring中连接各个数据库

    - 虽然在给定的内容中没有提及,但通常在Spring应用中,还需要配置事务管理器,比如`PlatformTransactionManager`,以便处理数据库操作的事务边界。这可以通过`&lt;tx:annotation-driven&gt;`或`&lt;bean&gt;`标签来实现,并将`...

    spring声明式事务管理+jdbc+连接池.zip

    本资料包"spring声明式事务管理+jdbc+连接池.zip"显然是针对Spring框架在数据库操作方面的深入学习,特别是如何利用Spring进行声明式事务管理和JDBC操作,以及如何配置和使用数据库连接池。接下来,我们将详细探讨这...

    Spring所需jar包包括数据库连接池

    在Spring框架中,使用C3P0可以提高数据库连接的效率,避免频繁创建和关闭连接的开销。C3P0提供了许多配置参数,如最小连接数、最大连接数、测试连接的间隔时间等,以适应不同应用的需求和性能优化。 在"SpringIOC...

    数据库连接池 java 整理

    数据库连接池在Java编程中扮演着至关重要的角色,特别是在处理大量并发访问的Web应用程序中。数据库连接池是一种管理数据库连接的机制,它允许程序高效地重复使用已建立的数据库连接,而不是每次需要时都创建新的...

    Spring Boot数据库事务控制.zip

    1. **启用事务管理**:在Spring Boot应用中,只需要在配置类上添加@EnableTransactionManagement注解,并配置数据源,即可启用事务管理。Spring Boot通过@ConfigurationProperties自动配置DataSource,例如使用...

    spring对多个数据库进行事务管理.doc

    Spring 框架确实提供了对多个数据库事务管理的支持,这对于多数据源的应用场景非常关键。在Spring中,事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要程序员手动控制事务的开始、提交、回滚等操作...

    连接池与Spring,Hibernate结合

    "连接池与Spring、Hibernate结合"这个主题涉及到的是如何有效地管理和复用数据库连接,以提高应用程序的效率和响应速度。这里我们将深入探讨连接池的概念,Spring框架中的数据源配置,以及Hibernate的集成,以及它们...

    web项目数据库连接样例

    总结,本示例的"web项目数据库连接样例"旨在展示如何在Web应用中建立数据库连接,执行SQL操作,以及使用连接池和事务管理。通过理解和实践这些知识点,开发者可以更好地构建高效、稳定的数据库驱动的Web应用。

    (品管工具QC七大手法)BSS_QC_数据库连接和事务管理专题.pdf

    【数据库连接池与事务管理】 在IT行业中,数据库连接管理和事务处理是系统性能优化和数据一致性的关键。本文将深入探讨“QC七大手法”之一的BSS系统中关于数据库连接和事务管理的主题。 首先,数据库连接池是提高...

    spring中 连接池的使用

    在Spring框架中,数据库连接池是管理数据库连接的关键组件,它能有效地提高应用程序的性能和资源利用率。在上述内容中,提到了两种常用的连接池实现:Apache的DBCP(BasicDataSource)和C3P0(ComboPooledDataSource...

    spring里面常见的集中数据库连接方式

    Spring提供了多种方式来管理数据库连接,以适应不同的应用场景。本文将深入探讨Spring中的几种常见数据库连接方式。 1. **JDBC模板(JdbcTemplate)** Spring的JdbcTemplate是基于JDBC的简单抽象层,它简化了编写...

    springboot数据库连接动态切换源代码

    在Spring Boot应用中,数据库连接动态切换是一种常见的需求,尤其在多租户或者有不同业务场景的系统中。本项目提供了实现这一功能的源代码,允许根据不同的用户操作或HTTP请求来选择不同的数据库,而无需修改...

    java数据库连接池.rar

    数据库连接池是Java应用程序在处理数据库交互时的重要组件,它能有效地管理数据库连接,提高系统性能,降低资源消耗。在Java开发中,我们通常会使用像C3P0、Druid这样的连接池来优化数据库访问。JDBC(Java Database...

    spring连接数据库aop-jdbc

    数据库连接池可以有效管理和重用数据库连接,提高系统性能并减少资源消耗。 8. **SQL参数化**: Spring JDBC的参数绑定机制可以防止SQL注入攻击。通过占位符(问号)和`PreparedStatement`,我们可以安全地传递...

    jdbc连接数据库事务工厂模式

    例如,使用`Class.forName()`加载数据库驱动,通过`DriverManager.getConnection()`获取数据库连接,`Statement`或`PreparedStatement`对象来执行SQL,最后使用`Connection.close()`关闭连接。 其次,事务是数据库...

    spring+mybatis应用demo含数据库

    7. **配置文件**:Spring的bean配置文件(如applicationContext.xml)和MyBatis的配置文件(mybatis-config.xml),定义了组件的装配和数据源的连接信息。 8. **Spring AOP**:可能涉及到使用Spring的AOP实现事务...

    Spring数据库访问之ORM(三)

    总结,Spring数据库访问中的ORM技术是企业级应用开发的重要组成部分。通过Spring对JPA、Hibernate、MyBatis等ORM框架的集成,我们可以轻松地在Java应用中进行数据库操作。同时,Spring提供的事务管理和数据源连接池...

    JAVA数据库连接池完整源码(简单易用带详细注释)

    数据库连接池是Java应用程序中非常重要的一个组件,它在处理大量并发访问数据库时能显著提高性能,通过复用已存在的数据库连接,避免了频繁创建和销毁连接带来的开销。本资源提供了一份完整的Java数据库连接池的源...

Global site tag (gtag.js) - Google Analytics