最近接手使用SSH开发一个信息管理系统,遇到了数据库事务锁等待的问题。具体表现就是系统运行使用一段时间后, 数据库无法插入修改数据的问题。经过排查问题出在事务管理代码上。
以下是示例代码
public String someMethod(){
DefaultTransactionDefinition def=new DefaultTransactionDefinition();
TransactionStatus status=transactionManager.getTransaction(def);
try{
if(someObject==null){
//put error message in Session
this.getSession().put("errorMsg","someObject is null.");
return ERROR;
}
//update or insert or delete some date
transactionManager.commit(status);
return SUCCESS;
}catch(Exception e){
e.printStackTrace();
this.getSession().put("errorMsg", "something is wrong");
transactionManager.rollback(status);
return ERROR;
}
}
ERROR和SUCCESS在Struts中进行了配置,有统一的页面来显示成功和错误信息。 以上代码的问题出在事务管理的try块中,如果其中someObject为null,则返回错误页面提示错误信息,而在return ERROR前没有rollback。
在return ERROR前将事务rollback即可解决问题。
public String someMethod(){
DefaultTransactionDefinition def=new DefaultTransactionDefinition();
TransactionStatus status=transactionManager.getTransaction(def);
try{
if(someObject==null){
//put error message in Session
this.getSession().put("errorMsg","someObject is null.");
transactionManager.rollback(status);
return ERROR;
}
//update or insert or delete some date
transactionManager.commit(status);
return SUCCESS;
}catch(Exception e){
e.printStackTrace();
this.getSession().put("errorMsg", "something is wrong");
transactionManager.rollback(status);
return ERROR;
}
}
该具体应用在判断某些条件不成立的时候返回错误提示,但此时数据库的事务已经存在,在返回错误提示时需要将事务rollback,否则数据库会一直维持事务状态,数据也就无法插入修改和删除了。
实际上数据库事务的成本是非常高的,建议先进行各种错误判断,最后进行事务操作。如果是在高性能,高并发,同时对数据一致性要求不高的情况下,可以干脆不使用事务。
以上是个人的一点看法,小弟刚入门Web开发,大家一起交流~
分享到:
相关推荐
SSH框架的整合提供了一种高效、灵活且可扩展的解决方案,使得开发者能够轻松地进行数据库的操作,如增、删、查、改等。 Spring框架是整个SSH的核心,它负责管理应用程序的各个组件,包括数据库访问对象(DAO)和...
本文将深入探讨如何在SSH框架中加入事务支持,特别是当Spring版本为2.0时。 首先,我们需要理解事务管理在企业级应用中的重要性。事务确保了数据的一致性和完整性,通过ACID(原子性、一致性、隔离性和持久性)属性...
接下来,我们将探讨如何在SSH框架下配置Oracle数据库连接: 1. **安装与配置Oracle驱动**:在项目中,我们需要引入Oracle的JDBC驱动,通常是ojdbc.jar或ojdbc6.jar。将其添加到项目的类路径中,可以是lib目录下,...
4. **数据库设计**:在SSH框架开发的系统中,数据库设计至关重要。它包括概念数据模型、逻辑数据模型和物理数据模型的设计。表结构、主键、外键、索引等元素的合理规划,能确保数据的一致性和完整性,提高系统的性能...
5. **图书馆管理系统**:图书馆管理系统是基于SSH框架和MySQL数据库构建的,旨在提供诸如图书检索、借阅、归还、预约、取消预约等功能。系统可能包含多个模块,如用户管理、图书管理、借阅管理等,每个模块对应特定...
【标题】:“BBS论坛(糗事百科+SSH框架+数据库文件)”指的是一个基于SSH框架开发的在线论坛系统,其设计灵感来源于知名的糗事分享网站糗事百科。SSH是Struts、Spring和Hibernate三个开源Java框架的组合,常用于...
本教程将详细介绍如何利用SSH框架结合Oracle数据库来实现基本的CRUD(Create、Read、Update、Delete)操作。 1. **Struts2**:作为MVC(Model-View-Controller)架构的一部分,Struts2负责处理用户请求,将这些请求...
在这个“带事务的ssh框架源代码”中,我们将会探讨SSH框架如何处理数据库事务,以及不同版本的Spring(1.2、2.5、3.2)在事务管理上的差异。 首先,Struts作为表现层框架,主要负责用户界面与控制器之间的交互。它...
8. **异常处理**:项目中提到了“异常”,在SSH框架下,可以统一捕获并处理异常,比如定义全局的异常拦截器,或者在Service层进行异常封装。 9. **数据库**:描述中提到"数据库添加上就可以直接运行",意味着项目...
总结来说,基于SSH框架的数据库增删改查涉及到多个层次的设计和实现,包括Struts2的动作调度、Spring的Bean管理和事务控制、Hibernate的对象关系映射,以及视图的呈现和测试。理解并熟练掌握这些知识点,能帮助...
执行这个脚本会为SSH框架的应用创建必要的数据结构,使得程序可以正常运行并与数据库进行交互。 而"wanghuohuo"看起来像是一个误传或者不完整的文件名,通常在SSH项目中,我们可能会看到如"Action类"、"Service接口...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是...通过研究这个"SSH框架投票系统源码及数据库",不仅可以深入理解SSH框架的工作原理,还能掌握实际开发中的问题解决技巧,为以后的Java Web开发打下坚实基础。
这个压缩包文件包含了一个已经配置好的SSH框架实例,以及一个数据库脚本和测试文件,非常适合初学者学习和快速上手。 首先,Struts2是MVC(Model-View-Controller)架构模式的实现,它用于处理用户请求并控制应用...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个压缩包文件"SSHdemo"提供了一个...配合提供的博客地址,可以获取更详细的步骤解释和问题解答,加深对SSH框架的理解。
这个压缩包提供的jar文件,为开发者搭建SSH框架和SQL Server数据库环境提供了便利,只需将这些jar包添加到项目的类路径中,就可以开始编写代码,大大减少了配置工作。但要注意的是,不同的项目可能还需要其他依赖,...
1. 配置环境:确保已经安装了JDK,设置好环境变量,并且在项目中引入SSH框架的依赖库。 2. 创建数据库表:根据业务需求设计数据库表,并创建对应的实体类,使用Hibernate的注解或XML配置文件来映射这些类和表。 3....
8. **实战经验**:在实际项目中,开发者需要关注性能优化、事务管理、异常处理等问题,这都需要对SSH框架有深入的理解。例如,合理使用Spring的AOP进行事务管理,避免Struts的性能瓶颈,以及优化Hibernate的查询性能...
这个“基于SSH框架的新闻管理系统”项目,利用了这三个组件的强大功能来构建一个高效、可扩展的学生宿舍管理系统,同时数据库选择了MySQL作为数据存储的后端。 首先,Struts2是MVC(Model-View-Controller)设计...
在实际开发中,SSH框架的集成使得开发者能高效地进行业务逻辑处理,同时Spring的事务管理功能可以确保数据一致性。通过阅读提供的文件,开发者可以深入理解SSH框架的工作原理,并将其应用于实际项目中,提高开发效率...
"基于SSH框架的mysql数据库导出脚本"这个主题主要涉及如何使用SSH框架中的工具或自定义脚本来导出MySQL数据库中的数据。在实际开发中,数据备份和迁移是非常重要的环节,尤其是在大型项目中,确保数据的安全性和完整...