- 浏览: 165487 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (116)
- 随笔 (2)
- spring (24)
- struts (1)
- hibernate (6)
- log4j (0)
- mysql (14)
- oracle (0)
- ext (0)
- jQuery (0)
- HTML+CSS (2)
- Javascript (1)
- 其它杂碎 (0)
- IT (3)
- J2EE综合 (15)
- SQLServer (1)
- 好文章URL 待阅读 (3)
- 编辑器 (2)
- 版本控制 (5)
- Tomcat (4)
- DoJo (0)
- Ubuntu (11)
- Hadoop (3)
- cxf (3)
- maven (6)
- CI (5)
- H2 (1)
- JVM (1)
- FirefoxOS (1)
- Jboss (1)
- 操作系统 (1)
- C3P0 (2)
- Quartz (1)
- maps (10)
- 设计模式 (5)
最新评论
-
yogurt2012:
请问··我如果要调试H2数据库来分析其JOIN算法应该怎么做呢 ...
H2笔记 -
carlosfu:
很好很全,很有收获
Spring3笔记之 JDBC -
ponlya:
coldrush 写道看了你的配置 ,刚绝 file:后加绝对 ...
添加使用dtd文件 -
ponlya:
byp19980911 写道这不是很好的解决办法,最好是使用连 ...
java.net.SocketException:Software caused connection abort: socket write error -
ponlya:
ayanami001 写道为什么spring没有封装分页吗,那 ...
Spring3笔记之 JDBC(分页)
摘自:http://zhxing.iteye.com/blog/368110
事务传播行为类型 |
说明 |
PROPAGATION_REQUIRED |
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 |
PROPAGATION_SUPPORTS |
支持当前事务,如果当前没有事务,就以非事务方式执行。如果是在事务中调用的,则加入事务中. |
PROPAGATION_MANDATORY |
使用当前的事务,如果当前没有事务,就抛出异常。 |
PROPAGATION_REQUIRES_NEW |
新建事务,如果当前存在事务,把当前事务挂起。即不论是否存在事务,业务方法都会为自己发起一个事务. |
PROPAGATION_NOT_SUPPORTED |
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
PROPAGATION_NEVER |
以非事务方式执行,如果当前存在事务,则抛出异常。 |
PROPAGATION_NESTED |
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |
当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制。
1. 更新丢失(Lost update):两个事务都同时更新一行数据但是第二个事务却中途失败退出导致对数据两个修改都失效了这是系统没有执行任何锁操作因此并发事务并没有被隔离开来。
隔离级别 更新丢失 脏读取 重复读取 幻读
未授权读取 N Y Y Y
授权读取 N N Y Y
可重复读取 N N N Y
串行 N N N N import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public class UserDaoImpl implements UserDao {
//private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
//this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
@Transactional(rollbackFor=Exception.class)//碰到Exception类的异常则进行回滚
//@Transactional(noRollbackFor=RuntimeException.class)//对运行时异常则是不回滚
public void delete(int id) {
jdbcTemplate.update("delete from User where id = ?",
new Object[]{id},new int[]{java.sql.Types.INTEGER});
}
@Override
//内嵌事务不会影响外面事务的提交与回滚
//@Transactional(propagation=Propagation.NOT_SUPPORTED)/propagation设置事务传播行为,这里设置其不支持事务,如此则在方法执行前则不会开启事务
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true,timeout=30)//设置只读事务,超时时间,默认30秒
public List<User> getAllUser() {
return (List<User>)jdbcTemplate.queryForObject("select * from User", new UserRowMapper());
}
@Override
@Transactional(propagation=Propagation.NOT_SUPPORTED,
readOnly=true,timeout=30)
//设置只读事务,超时时间,默认30秒
public User getUser(int id) {
return (User)jdbcTemplate.queryForObject("select * from User",new Object[]{id},new int[]{java.sql.Types.INTEGER}
,new UserRowMapper());
}
@Override
public void save(User user) {
jdbcTemplate.update("insert into User(name) values(?)",
new Object[]{user.getName()},new int[]{java.sql.Types.VARCHAR});
}
@Override
public void update(User user) {
jdbcTemplate.update("update User set name = ? where id = ? ",
new Object[]{user.getName(),user.getId()},new int[]{java.sql.Types.VARCHAR,java.sql.Types.INTEGER});
}
}
XML式:<bean id="dataSource" class="" destroy-method="">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"> </property>
<property name="url" value="jdbc:mysql://localhost:3301/SpringJDBC"></property>
<property name="username" value="root"></property>
<property name="password" value="126"></property>
<property name="initialSize" value="1"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="2"></property>
<property name="minIdle" value="1"></property>
</bean>
<!-- 事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<aop:config>
<!-- 定义拦截点 -->
<aop:pointcut id="transactionPointCut" expression="execution(* com.spring305.jdbc.test.po.UserDaoImpl2(..))" />
<!-- 通知 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointCut"/>
</aop:config>
<!-- 设置事务行为 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/>
<tx:method name="list*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
发表评论
-
Spring整合Hibernate(摘录)
2011-05-07 09:48 749简要步骤From:http://blog.csdn.net/s ... -
Spring3笔记之 JDBC(分页)
2011-04-25 22:08 2022接上篇的实体,DAO接口,实现,测试及XML http://p ... -
Spring3笔记之 JDBC
2011-04-25 22:02 7821使用Spring 的JDBC 先创建表: DROP TAB ... -
Spring3笔记之 AOP
2011-04-24 14:24 1908Spring AOP部分使用JDK动态代理或者CGLIB来为目 ... -
Spring3笔记之 AOP Cglib 代理
2011-04-24 14:13 1362JDK的Proxy实现代理要求 ... -
Spring3笔记之 AOP JDK 代理
2011-04-24 14:09 1060使用JDK代理,代理对象必须实现一接口 com.spring ... -
Spring3之 Resource
2011-04-21 22:49 3982主要是org.springframework.core.io. ... -
Spring3之 bean 注解
2011-04-20 22:18 1509小记下,spring注解相关: com.spring305. ... -
Spring3之 bean 定制bean特性
2011-04-19 21:10 1301Customizing the nature of a bea ... -
Spring3之 bean 作用域scope
2011-04-18 22:21 1463Bean scopes 作用域 5个:singleton,p ... -
Spring3之 bean Method injection
2011-04-17 20:04 1463Method injection(方法注入) bean都是s ... -
Spring3之 bean AutoWire
2011-04-17 12:01 5946Autowiring collaborators 自动装配 ... -
Spring3之 bean depends-on
2011-04-17 08:56 3289depends-on depend-on用来表 ... -
Spring3之 bean Lazy-initialized beans
2011-04-17 08:48 1973Lazy-initialized beans延迟 ... -
Spring3之 集合对象属性注入
2011-04-16 23:17 1214com.spring305.test.beanInit.cpo ... -
Spring3之 bean idref?
2011-04-16 18:39 973很是奇怪idref是干什么 ... -
Spring3之 bean简单属性注入
2011-04-16 17:40 1370DI (依赖注入)有二种: Constructor-based ... -
Spring3之 实例化bean2
2011-04-16 14:30 1021Spring3之 bean命名(http://ponlya.i ... -
Spring3之 bean命名
2011-04-16 11:36 2014一、bean的命名采用标准Java命名约定:小写字母开头,首字 ... -
Spring3之 IoC容器的实例化
2011-04-16 08:39 1521Bean:在Spring中,那些组成你应用程序的主体(ba ...
相关推荐
这里使用了`DataSourceTransactionManager`作为事务管理器,它是Spring中最常用的事务管理器之一,适用于JDBC事务。 ##### 2. 启动事务注解 要在Spring应用中启用基于注解的事务管理,需要在配置类中添加@...
Spring定义了七种事务传播行为,如`REQUIRED`(默认,如果当前没有事务则新建,有则加入)、`SUPPORTS`(如果存在事务则支持,否则不开启)、`MANDATORY`(必须在现有事务中运行,否则抛异常)、`REQUIRES_NEW`...
Spring.NET事务配置模板。 原文出处:http://www.cnblogs.com/GoodHelper/archive/2009/11/16/SpringNet_Transaction.html
- **Spring Context**:建立在核心容器基础之上,提供了对国际化支持、事件传播、资源加载以及应用层的集成接口等功能的支持。 - **Spring AOP**:提供面向切面编程的支持,允许以声明的方式将切面加入到业务方法中...
在Spring框架中,声明式事务管理是其核心特性之一,它允许开发者通过配置来控制事务的行为,而无需在代码中显式地管理事务的开始、提交、回滚等操作。这种方式使得事务管理更加灵活,也使得代码更加简洁,易于维护。...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...
4. **事务传播行为** 传播行为定义了在一个事务方法被另一个事务方法调用时,应该如何处理事务。比如`Propagation.REQUIRED`表示如果当前存在事务,那么加入当前事务,否则新建一个。 5. **事务隔离级别** 隔离...
同时,Spring的事务管理机制是其核心功能之一,支持编程式和声明式两种方式,使得开发者可以方便地控制事务的边界。 其次,Hibernate是Java领域最流行的ORM(Object-Relational Mapping)框架,它简化了数据库操作...
3. **事务传播行为**:Spring.NET支持七种事务传播行为,如`REQUIRED`(如果当前存在事务,则加入,否则新建)、`SUPPORTS`(如果存在事务则参与,不存在则不开启新事务)、`MANDATORY`(如果存在事务则参与,不存在...
注解中还可以设置不同的属性,如propagation(事务传播行为)、isolation(隔离级别)、timeout(超时时间)和read-only(只读事务)等,以满足不同场景的需求。 例如,在一个简单的Spring MVC应用中,你可能会在...
此外,Spring的事务管理还支持PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW等不同的事务传播行为。例如,PROPAGATION_REQUIRED是默认的行为,表示如果当前存在事务,则加入该事务;如果没有事务,则新建一个。而...
2. **Spring Context**:建立在Core之上,提供了一个配置文件的加载机制及事件传播机制。 3. **Spring AOP**:提供了面向切面编程的实现,让开发者能够更加方便地实现诸如事务管理等功能。 4. **Spring DAO**:提供...
在事务传播行为中,`required_new`表示如果当前方法在事务中,当前事务会被挂起,新开启一个事务执行被调用的方法,直到新事务结束,然后继续执行原方法的事务。而`required`则是最常见的情况,它表示如果方法需要在...
Spring框架是Java企业级应用开发中的核心框架,它提供了全面的解决方案,包括数据访问、事务管理、AOP(面向切面编程)、MVC(模型-视图-控制器)等。本笔记主要关注Spring的基础知识,特别是针对初学者的入门实例。...
【Spring学习笔记】 一、Spring概述 1.1 Spring框架的作用 Spring是一个开源的应用于企业级Java应用的全面框架,其主要目标是简化Java开发,提高代码可测试性,并促进良好的编程实践。它通过依赖注入(Dependency ...
本笔记将详细解析Spring框架的基础知识,帮助你更好地理解并掌握Spring的核心概念。 首先,我们需要了解Spring框架的主要模块: 1. **核心容器**:这是Spring框架的基础,包括BeanFactory和ApplicationContext。...
通过`TransactionProxyFactoryBean`,我们可以为特定的业务bean指定事务属性,如事务传播行为、隔离级别、超时等。 3. **BeanNameAutoProxyCreator** `BeanNameAutoProxyCreator`是Spring提供的一个通用代理工厂,...
本总结笔记是Spring、Mybatis、SpringMVC的综合学习资源,涵盖了这些框架的基本概念、配置方式、优点与适用场景,以及它们各自组件和功能点的详细解释。适用于初学者入门学习,同时也可以作为面试时的参考资料,帮助...
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而这里的“SSH笔记-事务管理”主要关注的是Spring框架中的事务管理部分。Spring以其强大的依赖注入和面向切面编程能力,提供了灵活...
**依赖注入** 是Spring.NET的核心特性之一,它反转了对象之间依赖关系的控制权。传统的编程中,对象通常会自行创建其依赖的对象实例,而在Spring.NET中,依赖关系由外部容器(IoC容器)负责管理和注入,使得对象只需...