<?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&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默认的事务处理准确处理。
关于异常的分类一下详细介绍:
相关推荐
同时,项目结构应包含Spring的配置文件(如`applicationContext.xml`)和数据库连接相关的bean定义。此外,确保数据库服务器运行正常,连接参数正确无误。 总结来说,这个"spring连接数据库实例"主要涵盖了Spring...
在Spring框架中,数据库连接池是实现高效数据库操作的关键组件,它允许应用程序重复使用已建立的数据库连接,而不是每次都创建新的连接,从而提高了性能和资源利用率。 在Java中,常见的数据库连接池工具有C3P0、...
- 虽然在给定的内容中没有提及,但通常在Spring应用中,还需要配置事务管理器,比如`PlatformTransactionManager`,以便处理数据库操作的事务边界。这可以通过`<tx:annotation-driven>`或`<bean>`标签来实现,并将`...
本资料包"spring声明式事务管理+jdbc+连接池.zip"显然是针对Spring框架在数据库操作方面的深入学习,特别是如何利用Spring进行声明式事务管理和JDBC操作,以及如何配置和使用数据库连接池。接下来,我们将详细探讨这...
在Spring框架中,使用C3P0可以提高数据库连接的效率,避免频繁创建和关闭连接的开销。C3P0提供了许多配置参数,如最小连接数、最大连接数、测试连接的间隔时间等,以适应不同应用的需求和性能优化。 在"SpringIOC...
数据库连接池在Java编程中扮演着至关重要的角色,特别是在处理大量并发访问的Web应用程序中。数据库连接池是一种管理数据库连接的机制,它允许程序高效地重复使用已建立的数据库连接,而不是每次需要时都创建新的...
1. **启用事务管理**:在Spring Boot应用中,只需要在配置类上添加@EnableTransactionManagement注解,并配置数据源,即可启用事务管理。Spring Boot通过@ConfigurationProperties自动配置DataSource,例如使用...
Spring 框架确实提供了对多个数据库事务管理的支持,这对于多数据源的应用场景非常关键。在Spring中,事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要程序员手动控制事务的开始、提交、回滚等操作...
"连接池与Spring、Hibernate结合"这个主题涉及到的是如何有效地管理和复用数据库连接,以提高应用程序的效率和响应速度。这里我们将深入探讨连接池的概念,Spring框架中的数据源配置,以及Hibernate的集成,以及它们...
总结,本示例的"web项目数据库连接样例"旨在展示如何在Web应用中建立数据库连接,执行SQL操作,以及使用连接池和事务管理。通过理解和实践这些知识点,开发者可以更好地构建高效、稳定的数据库驱动的Web应用。
【数据库连接池与事务管理】 在IT行业中,数据库连接管理和事务处理是系统性能优化和数据一致性的关键。本文将深入探讨“QC七大手法”之一的BSS系统中关于数据库连接和事务管理的主题。 首先,数据库连接池是提高...
在Spring框架中,数据库连接池是管理数据库连接的关键组件,它能有效地提高应用程序的性能和资源利用率。在上述内容中,提到了两种常用的连接池实现:Apache的DBCP(BasicDataSource)和C3P0(ComboPooledDataSource...
Spring提供了多种方式来管理数据库连接,以适应不同的应用场景。本文将深入探讨Spring中的几种常见数据库连接方式。 1. **JDBC模板(JdbcTemplate)** Spring的JdbcTemplate是基于JDBC的简单抽象层,它简化了编写...
在Spring Boot应用中,数据库连接动态切换是一种常见的需求,尤其在多租户或者有不同业务场景的系统中。本项目提供了实现这一功能的源代码,允许根据不同的用户操作或HTTP请求来选择不同的数据库,而无需修改...
数据库连接池是Java应用程序在处理数据库交互时的重要组件,它能有效地管理数据库连接,提高系统性能,降低资源消耗。在Java开发中,我们通常会使用像C3P0、Druid这样的连接池来优化数据库访问。JDBC(Java Database...
数据库连接池可以有效管理和重用数据库连接,提高系统性能并减少资源消耗。 8. **SQL参数化**: Spring JDBC的参数绑定机制可以防止SQL注入攻击。通过占位符(问号)和`PreparedStatement`,我们可以安全地传递...
例如,使用`Class.forName()`加载数据库驱动,通过`DriverManager.getConnection()`获取数据库连接,`Statement`或`PreparedStatement`对象来执行SQL,最后使用`Connection.close()`关闭连接。 其次,事务是数据库...
7. **配置文件**:Spring的bean配置文件(如applicationContext.xml)和MyBatis的配置文件(mybatis-config.xml),定义了组件的装配和数据源的连接信息。 8. **Spring AOP**:可能涉及到使用Spring的AOP实现事务...
总结,Spring数据库访问中的ORM技术是企业级应用开发的重要组成部分。通过Spring对JPA、Hibernate、MyBatis等ORM框架的集成,我们可以轻松地在Java应用中进行数据库操作。同时,Spring提供的事务管理和数据源连接池...
数据库连接池是Java应用程序中非常重要的一个组件,它在处理大量并发访问数据库时能显著提高性能,通过复用已存在的数据库连接,避免了频繁创建和销毁连接带来的开销。本资源提供了一份完整的Java数据库连接池的源...