本身使用Spring中的注解管理事务是一件非常简单的事情,但还是在实际项目中遇到了一点问题,现将其记录下来, 也希望
能和明白的人士进行探讨。
一. 首先就是在Spring 配置文件中进行配置
<bean id =" transactionManager "
class =" org.springframework.jdbc.datasource.DataSourceTransactionManager " >
< property name =" dataSource " ref =" dataSource " />
</ bean >
< tx:annotation-driven transaction-manager =" transactionManager " />
二.然后就是在类或接口中的方法进行注解操作
如:
此处为DAO接口
@Transactional(propagation=Propagation.REQUIRED)
public interface LogicDao{
@Transactional(propagation=Propagation.REQUIRED)
public int[] insertQuestion(QuestionA questionUser,QuestionB questionNaire);
@Transactional(propagation=Propagation.REQUIRES_NEW)
public boolean insertQuestion2(QuestionA questionUser,QuestionquestionNaire);
}
然后我们在service层中调用dao
@Transactional(propagation=Propagation.REQUIRED)
public int[] insertQuestion(QuestionUser questionUser,QuestionNaire questionNaire)
{
Object obqe;
Object obqu;
int[] seqs = new int[2];
obqe = this.getQdao().insertQeuestion(questionNaire);
obqu = this.getQdao().insertQeuestionUser(questionUser);
if(obqu!=null && obqe!=null)
{
seqs[0]=(Integer)obqe;
seqs[1]=(Integer)obqu;
return seqs;
}
else
{
return null;
}
}
此时,spring管理事务就算是OK了,原理没有说,这里只讲应用。
但是我在项目中遇到了一个问题
我在声明dao中的方法throws Exception 如下
@Transactional(propagation=Propagation.REQUIRED)
public interface LogicDao{
@Transactional(propagation=Propagation.REQUIRED)
public int[] insertQuestion(QuestionA questionUser,QuestionB questionNaire) throws Exception;
@Transactional(propagation=Propagation.REQUIRES_NEW)
public boolean insertQuestion2(QuestionA questionUser,QuestionquestionNaire)throws Exception;
}
然后重新在service层中的insertQuestion方法中对其进行try catch中进行捕获,此时发现spring中的事务就不起作用了。
现在我也没有查出是为什么,还是对spring理解的不深,如何有明白的人留个脚印。
分享到:
相关推荐
然而,在实际开发过程中,可能会遇到使用Spring MyBatis纯注解方式配置的事务无法正常提交的情况,尤其是在使用Oracle数据库时更为常见。 ### 问题描述 本文主要针对在Spring + MyBatis环境下,或使用Spring JDBC...
3. **解决方案:正确配置事务切面的顺序** - 在Spring中,事务管理器本身也可以被看作是一种切面,它负责在合适的时候开启和提交事务。因此,当有多个切面需要被应用到同一个方法上时,切面的执行顺序就显得尤为...
例如,在上述的`UserService`中,即使我们在`userRepository.save(user)`操作中遇到问题,由于事务管理的存在,整个操作都会被回滚,不会影响到数据库的其他数据。 总结来说,"spring3hibernate4注解式事务管理"是...
通过Spring DM,你可以像在非OSGi环境中一样配置事务管理。 4. **注意类加载器的兼容性**:确保你的事务管理类和相关的AOP库能在所有相关bundle中被正确识别和加载。 5. **配置MetaType信息**:在DS中,你需要为事务...
1. 创建Spring配置文件:在XML配置文件(如`applicationContext.xml`)中,我们需要配置事务管理器。这通常是一个`PlatformTransactionManager`的实现,如`DataSourceTransactionManager`,它基于JDBC来管理事务。 ...
在Spring框架中,声明式事务管理是实现事务处理的一种高效且灵活的方式,它允许开发者通过XML配置或注解来定义事务边界,而无需在业务逻辑代码中显式地调用开始、提交或回滚事务的方法。这篇博文"Spring使用XML配置...
本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...
7. **案例分析**:"SPRING事务管理案例分析.docx"很可能包含了具体的项目实例,详细讲解了如何在Spring项目中配置和使用事务管理,以及如何解决实践中遇到的问题。而"studyspring"可能是源代码目录,包含了实现这些...
5. **事务配置**:在Spring XML配置文件中,我们需要配置事务管理器,例如DataSourceTransactionManager用于JDBC事务,HibernateTransactionManager用于Hibernate事务。同时,还需要开启事务代理,如下所示: ```...
然而,在整合过程中,可能会遇到注解找不到action的问题,这通常是配置或理解上的误区导致的。下面我们将详细探讨这个问题及其解决方案。 1. **Struts2和Spring3的整合原理** - **Struts2**:主要负责处理HTTP请求...
为了确保事务管理的有效性,开发者应该理解并正确使用@Transactional注解,合理配置事务管理的相关参数,注意异常的处理,并避免在事务管理失效的情况下编写业务逻辑代码。在开发过程中,进行充分的测试,尤其是集成...
3. 声明式事务管理:利用Spring AOP的特性,Spring支持声明式事务管理,即可以在配置文件或注解中声明事务属性,这使得事务管理更加灵活和方便。 Spring的事务管理还提供了强大的事务传播行为和隔离级别配置,...
编程式事务管理使用TransactionTemplate或PlatformTransactionManager接口手动管理事务,而声明式事务管理则是通过在XML配置或注解中定义事务规则。在这个例子中,我们可能关注的是声明式事务管理,因为它是Spring中...
在IT领域,Spring框架是Java开发中的核心工具之一,它为构建高质量的、可维护的、松耦合的应用程序...在实践中,你可能会遇到的问题包括事务传播行为、异常回滚规则、事务隔离级别等,这些都是进一步学习和研究的方向。
以上就是关于Spring AOP配置事务管理的基本介绍,通过注解和非注解方式,我们可以灵活地在应用程序中管理事务,确保数据的一致性和完整性。实际开发中,应根据项目需求和团队习惯选择合适的方式。
在Spring的配置文件中,我们通常会定义一个`<tx:annotation-driven>`元素来启用基于注解的事务管理。例如: ```xml ``` 这里,`transactionManager` 是你定义的事务管理器bean的ID,通常是`...