- 浏览: 1068649 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
1.通过在编码中控制事物
springContext.xml:
...
<bean id="teamDaoImpl" class="com.dao.ObjDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
<property name="transactionTemplate">
<bean class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
...
首先要配置一个事物管理器transactionManager,该事物管理器要配置是一个相应的数据源datasource。然后在teamDaoImpl中配置一个属性transactionManager。
JAVA代码:
package com.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
import com.vo.Team;
public class ObjDaoImpl implements ObjDao {
private JdbcTemplate jdbcTemplate;
private TransactionTemplate transactionTemplate;
public TransactionTemplate getTransactionTemplate() {
return transactionTemplate;
}
public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
this.transactionTemplate = transactionTemplate;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void getMoney() {
this.transactionTemplate.execute(
new TransactionCallback(){
public Object doInTransaction(TransactionStatus ts){
try {
System.out.println("过程一");
System.out.println("过程二");
System.out.println("过程三");
} catch (Exception e) {
ts.setRollbackOnly();
}
return null;
}
}
);
}
}
注释:添加事物的一种方法是利用spring的TransactionTemplate类,该类有一种回调机制,要想使用该类,必须从实现TransactionCallBack接口开始,由于该接口只有一个方法需要实现,因此可以把他作为一个匿名内部类来实现,将所需要作为实物来处理的代码,把他们放入 doInTransaction()即可。
调用TransactionTemplate的execute()方法,即执行包含在TransactionCallback事例里的代码。如果代码遇到了问题,则调用TransactionStatus对象的setRollbackOnly()方法来回滚整个事物。
在实现类中的TransactionTemplate是在配置文件中配置org.springframework.transaction.support.TransactionTemplate来实现的。
2.通过在applicationContext.xml中配置事物
...
<bean id="teamDaoImpl" class="com.dao.ObjDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
<property name="transactionTemplate">
<bean class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="teamProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target" ref="teamDaoImpl"></property>
<property name="proxyInterfaces" value="com.dao.ObjDao"></property>
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
...
该配置文件定义了三个部分:
1.target:表示具体要代理的对象。
2.proxyInterfaces:表示代理对象所实现的接口
3.transactionManager:表示定义的事物管理器
<prop key="add*">PROPAGATION_REQUIRED</prop>
表示对teamDaoImpl中的ADD开头的方法添加事物。
SPRING定义了7种不同的传播行为。具体可以GOOGLE查下。
JAVA代码:
package com.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
import com.vo.Team;
public class ObjDaoImpl implements ObjDao {
private JdbcTemplate jdbcTemplate;
private TransactionTemplate transactionTemplate;
public TransactionTemplate getTransactionTemplate() {
return transactionTemplate;
}
public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
this.transactionTemplate = transactionTemplate;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void save(Team team) {
String sql = "insert into team (Name) values(?)";
this.jdbcTemplate.update(sql,new Object[]{team.getName()});
}
public Team getTeamById(int id) {
// TODO Auto-generated method stub
String sql = "select id,name from team where id=?";
List teams = this.jdbcTemplate.query(sql,new Object[]{Integer.valueOf(id)},new RowMapper(){
public Object mapRow(ResultSet rs,int rowNum) throws SQLException,DataAccessException{
Team team = new Team();
team.setId(rs.getInt("id"));
team.setName(rs.getString("name"));
return team;
}
});
return teams.size()>0?(Team)teams.get(0):null;
}
public void getMoney() {
this.transactionTemplate.execute(
new TransactionCallback(){
public Object doInTransaction(TransactionStatus ts){
try {
System.out.println("过程一");
System.out.println("过程二");
System.out.println("过程三");
} catch (Exception e) {
ts.setRollbackOnly();
}
return null;
}
}
);
}
//通过在配置文件定义后,只对该方法添加了事物。
public void addMoneyXml() {
System.out.println("过程一");
System.out.println("过程二");
System.out.println("过程三");
}
}
发表评论
-
spring整合memeched
2017-11-23 14:18 501XMemcached是一个基于Java nio的memcac ... -
Spring 4 MVC @RestController 注解实现REST Service
2017-11-07 10:56 1005简短 & 快速介绍REST REST表示 Repr ... -
SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
2017-10-25 15:54 5401、基本概念 1.1、Spring Sp ... -
spring mvc 文件上传
2017-10-03 23:14 528直接上代码吧,大伙一看便知 这时:commonsmulti ... -
SpringMVC对静态资源进行缓存
2017-09-26 15:19 405在dispatcher-servlet.xml中配置: ... -
springmvc常用注解标签详解
2017-09-12 08:30 3661、@Controller 在SpringMVC ... -
Spring JdbcTemplate 与 事务管理 学习
2014-11-12 09:35 769Spring的JDBC框架能够承担资源管理和异常处理的工作, ... -
Spring中使用annotation注入
2014-11-12 08:42 672我们使用Spring 一般式在xml配置文件中进行注入.但是 ... -
spring集成数据库连接池
2014-11-07 14:30 813我项目中使用的是proxool数据库连接池, 首先在web ... -
spring+xifre 发布webservice服务
2011-12-28 10:01 1661利用xfire编写webservice的例子,内容如下1. x ... -
spring3.0事物配置
2011-11-02 16:47 1870第一种配置方法:基于XML的事务管理 这种方法不需要对原有的 ... -
spring aop的注解配置中,前置,后置,环绕通知,以及异常通知怎么获得被代理方法的参数
2011-10-23 22:17 4972定义的接口 package com.aspectaop; ... -
spring 事物配置全文
2011-10-20 10:39 1041根据代理机制不同,有以下几种配置方式: 先定义 ... -
spring 2.0使用AOP实例(基于Annotation的配置方式)
2011-10-19 14:53 1209使用Java5注解配置及使用Spring AOPSpring2 ... -
spring 2.0使用AOP实例(基于XML的配置方式)
2011-10-19 14:44 1413设计系统的核心业务组件。基于针对接口编程的原则,一个好习惯是先 ... -
spring1.x使用AOP实例
2011-10-19 08:23 1362spring1.x使用AOP配置。 applicationC ... -
使用 Spring 注释学习笔记
2011-10-18 10:33 833概述 注释配置相对于 XML 配置具有很多的优势: 它可 ... -
spring 3.0配置实用例-applicationContext.xml 空白文档
2011-10-18 10:24 2335<?xml version="1.0" ... -
使用spring2.5注释驱动的IOC功能
2011-10-13 14:26 711概述 注释配置相对于 XML 配置具有很多的优势: 它可 ... -
利用Annotation来实现属性的注入
2011-05-06 21:36 1181在以前的SPRING中我们通常采用的方式是在XML文件来来实现 ...
相关推荐
"spring-控制事物回滚"这个主题主要涉及Spring如何在出现异常时自动或手动触发事务的回滚,以及如何配置和使用Spring的事务管理机制。我们将深入探讨Spring事务管理的原理、API使用以及在实际开发中的应用。 首先,...
- 编程式事务管理允许在代码中直接控制事务的开始、提交、回滚等操作,使用`PlatformTransactionManager`接口和`TransactionDefinition`、`TransactionStatus`等类。这种方式虽然灵活,但侵入性较强,不推荐在业务...
spring事务控制jar包,请网上自寻下载
标题中的“spring-控制事务”指的是Spring框架中的事务管理功能,这是Spring的核心特性之一,用于在多层架构中实现数据库事务的一致性和可靠性。在Java企业级应用开发中,事务管理是至关重要的,确保数据操作的原子...
Spring提供了一种声明式事务管理方式,使得开发者可以在不直接编写事务控制代码的情况下,通过配置来管理事务的边界。在"spring的2个数据源的配置"中,这意味着系统可能需要处理来自两个不同数据源的数据,例如一个...
在Spring框架中,事务管理是核心功能之一,它提供了对应用程序数据访问层的事务支持。Spring的事务管理机制包括编程式事务管理和声明式事务管理,这两种方式都基于`spring-tx`模块。在这个源码中,我们可以深入理解...
接下来,为了实现更灵活的事务控制,可以利用AOP的方式定义事务通知。具体而言,可以创建一个`tx:advice`元素来指定哪些方法应该被事务管理。例如,下面的配置表示所有以`add*`开头的方法都将采用REQUIRED传播行为:...
### Spring事务配置的五种模式详解 在Spring框架中,事务管理是十分重要的特性之一,它可以帮助开发者确保数据的一致性和完整性。对于不同的业务场景,Spring提供了多种事务配置的方式,以便于灵活应对各种需求。...
总之,Spring 的事务管理机制使得开发者能够轻松地在应用中实现复杂的事务控制,保证了数据的一致性和可靠性,是企业级 Java 应用开发的重要组成部分。通过选择适当的事务管理器和定义事务属性,开发者可以有效地...
本文将深入探讨“Spring事物传播测试表”所涉及的知识点。 首先,理解事务是非常重要的。在数据库操作中,事务确保数据的一致性和完整性。例如,一组相关的数据库操作要么全部成功,要么全部失败,这就是事务的ACID...
标题"spring编程式事物"主要关注的是编程式事务管理。这种方式允许开发者通过`PlatformTransactionManager`接口和`TransactionDefinition`接口来控制事务的生命周期。在Spring中,通常使用`TransactionTemplate`或者...
3. **代理机制**:Spring通过代理机制实现事务控制,包括AOP(面向切面编程)代理和JDK动态代理。代理机制是决定事务策略的关键部分,它决定了事务如何在方法调用间传播。 接下来,我们将详述Spring配置事务的五种...
这种方式灵活性高,但容易导致事务控制代码与业务逻辑混淆,不易维护。 2. **声明式事务管理**:这是Spring最常用的方式,通过在配置文件或者使用`@Transactional`注解来定义事务边界,使得事务管理与业务逻辑分离...
其中,**IoC(Inversion of Control,控制反转)**与**DI(Dependency Injection,依赖注入)**是其核心特性之一。Spring通过IoC容器实现了对象的创建、管理和维护等功能,简化了Java应用的开发过程。 **IoC容器的...
版本:springcloud 2021.0.1,springboot 2.6.4,seata 1.4.2,nacos 2.0.3 (其他所有依赖版本均为最新mybatis-plus,fegin等等......) 模拟订单和库存的一个简单案例实现,注册到nacos配置中心,通过feign远程调用...
通过理解Spring事务的核心接口和相关概念,我们可以更好地控制和管理应用程序中的数据操作,确保数据的完整性和一致性。在实际开发中,通常结合声明式和编程式事务管理以达到最佳的事务处理效果。
Spring.NET 是一个基于 .NET Framework 的轻量...通过这个小示例,你将学习如何在 Spring.NET 中设置声明式事务管理,以及如何通过配置和注解控制事务的行为。这有助于创建更稳定、可扩展和易于维护的 .NET 应用程序。
本文主要关注Spring框架中的事务管理,它提供了一种声明式和编程式的事务处理方式,使得开发者能够方便地在应用层面上控制事务。 首先,我们需要理解事务的基本概念。事务是数据库操作的基本单元,它包含一组操作,...
`@RollbackFor`和`@NoRollbackFor`用于控制哪些异常类型需要触发回滚或不触发回滚。 5. **action-servlet.xml**:虽然这个文件名通常与Struts2的配置关联,但在Spring MVC中,也可能包含关于Controller层的配置。在...