`
shenshuibomb
  • 浏览: 24459 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Spring 注解配置事务中所遇到的一点问题

阅读更多

本身使用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理解的不深,如何有明白的人留个脚印。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics