关于Spring事务控制方面的问题,就是不在service层做控制现在我在写一个小系统,需要引入事务控制相关的东西.原来与spring事务都是在service层做的,现在我这个系统有需求是在controller层(action层
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 19:36:15
![关于Spring事务控制方面的问题,就是不在service层做控制现在我在写一个小系统,需要引入事务控制相关的东西.原来与spring事务都是在service层做的,现在我这个系统有需求是在controller层(action层](/uploads/image/z/9672470-62-0.jpg?t=%E5%85%B3%E4%BA%8ESpring%E4%BA%8B%E5%8A%A1%E6%8E%A7%E5%88%B6%E6%96%B9%E9%9D%A2%E7%9A%84%E9%97%AE%E9%A2%98%2C%E5%B0%B1%E6%98%AF%E4%B8%8D%E5%9C%A8service%E5%B1%82%E5%81%9A%E6%8E%A7%E5%88%B6%E7%8E%B0%E5%9C%A8%E6%88%91%E5%9C%A8%E5%86%99%E4%B8%80%E4%B8%AA%E5%B0%8F%E7%B3%BB%E7%BB%9F%2C%E9%9C%80%E8%A6%81%E5%BC%95%E5%85%A5%E4%BA%8B%E5%8A%A1%E6%8E%A7%E5%88%B6%E7%9B%B8%E5%85%B3%E7%9A%84%E4%B8%9C%E8%A5%BF.%E5%8E%9F%E6%9D%A5%E4%B8%8Espring%E4%BA%8B%E5%8A%A1%E9%83%BD%E6%98%AF%E5%9C%A8service%E5%B1%82%E5%81%9A%E7%9A%84%2C%E7%8E%B0%E5%9C%A8%E6%88%91%E8%BF%99%E4%B8%AA%E7%B3%BB%E7%BB%9F%E6%9C%89%E9%9C%80%E6%B1%82%E6%98%AF%E5%9C%A8controller%E5%B1%82%EF%BC%88action%E5%B1%82)
关于Spring事务控制方面的问题,就是不在service层做控制现在我在写一个小系统,需要引入事务控制相关的东西.原来与spring事务都是在service层做的,现在我这个系统有需求是在controller层(action层
关于Spring事务控制方面的问题,就是不在service层做控制
现在我在写一个小系统,需要引入事务控制相关的东西.
原来与spring事务都是在service层做的,现在我这个系统有需求是在controller层(action层)做事务控制,请问这个可能吗?还有有没有具体的实现方法和事例.
关于Spring事务控制方面的问题,就是不在service层做控制现在我在写一个小系统,需要引入事务控制相关的东西.原来与spring事务都是在service层做的,现在我这个系统有需求是在controller层(action层
同意1楼的兄弟说的,业务逻辑应该由service处理,造成需要在action开启事务的最根本原因主要是你的组件层API设计有问题,action中不该处理业务逻辑代码的,需要调多个service完成的功能其实就是一个业务,不过不按1楼说的把action放到spring托管也有办法在action手动开启事务,下边是我以前写的代码,当时是为了解决遗留系统的事务问题,你可以参考测试一下:
public interface ITransactionManager {
/**
* 该方法中是需要进行事务控制的内容
* @return
* @throws Exception
*/
Object doInTransaction() throws Exception;
}
public class DataSourceTransactionUtil {
public Object execute(final ITransactionManager transactionManager){
DataSourceTransactionManager dataSourceTransactionManager = getDataSourceTransactionManager();
TransactionTemplate transactionTemplate = new TransactionTemplate(dataSourceTransactionManager);
return transactionTemplate.execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus transactionStatus) {
Object savepoint = transactionStatus.createSavepoint();
Object result = null;
try{
result = transactionManager.doInTransaction();
} catch(Exception e){
transactionStatus.rollbackToSavepoint(savepoint);
e.printStackTrace();
} finally{
transactionStatus.releaseSavepoint(savepoint);
}
return result;
}
});
}
private DataSourceTransactionManager getDataSourceTransactionManager(){
return (DataSourceTransactionManager)getBean("transactionManager");
}
}
解释一下:
这段代码我记得是看了spring源码后自己写的.
1、getBean("transactionManager");是获得spring中事务管理器那个bean,你自己改名字.
2、把这段代码放到你的BaseAction中:
protected Object beginTransaction(ITransactionManager transactionManagerImpl){
DataSourceTransactionUtil dt = new DataSourceTransactionUtil();
return dt.execute(transactionManagerImpl);
}
3.在你需要开启事务的action中调用beginTransaction方法transactionManagerImpl这个对象你写个匿名内部类然后实现doInTransaction() 方法,在doInTransaction() 中去写你调用多个service的代码