Prototype功能预览四:异步处理-完美解决Spring中的事务问题
来源:互联网 发布:做淘宝美工怎么样 编辑:程序博客网 时间:2024/06/07 21:06
框架整体介绍:http://blog.csdn.net/flyxxxxx/article/category/7055640
对此框架有兴趣或想参与开发的请加QQ群:255195191在Spring框架中,通常建议事务在Service层完成,但这样实际会造成这样一些问题:
1、部分开发会在Controller层调用了多个Service去写数据库(这只有通过代码的review才能发现)。这在大多数情况下不是问题,但如果是微服务环境,可能会引起大量数据不一致问题。
如果切换事务到Controller层或Servlet过滤器中,会造成不需要事务的也开启了事务。
2、调用某些数据库操作后,需要异步抛出一个事件,在Service这一层可能因事务未提交,事件处理出现问题。
3、需要记录用户的操作日志时,操作日志严格来说,应该在控制器层完成,与业务处理的线程不应该是同一线程(实际开发现状是几乎所有系统都没这样做),要在控制器层异步记录操作日志,通常只能写个丑陋的回调线程了。
在Prototype框架中:
public class DemoBusiness extends Business{
public boolean validate(){
//在这个方法进行数据校验
}
public void business(TestService ts,Connection connection){
//在这个方法完成主要业务部
}
void async(ApplicationEventPublisher publisher){
//在这个方法异步抛出事件,此方法会被框架异步调用
}
void async(LogService ls){
//在这个方法记录操作员日志,此方法会被框架异步调用
}
}
以上方法中,async开头的方法(此规则也可以自己定义),参数可以自定义(只要它来源于Spring applicationContext),被默认为是异步调用的.可以有多个async命名的方法。如果需要,还可以在任意方法上加spring注解@Async来标明此方法需要异步执行
在Prototype框架中,被标明为异步执行的方法,自动使用线程池(如果在Spring applicationContext中有定义一个线程池)来执行异步操作,不需要程序员来指定(当然也可以通过参数指定)。
在Prototype框架中,不同的业务方法(此规则可通过一个注解自定义)根据预先的定义,可以有不同的事务,只读,可写,无事务,异步事务等。以应对不同的场景。
在Spring中,Async注解虽然有异步功能,但使用上并没有Prototype框架灵活。
- Prototype功能预览四:异步处理-完美解决Spring中的事务问题
- Prototype功能预览十二:一个注解可在Spring MVC的Servlet3的异步处理与同步处理间切换
- Hibernate延迟加载以及利用Spring事务完美解决延迟加载问题
- 照相机预览、拍照以及适配问题的完美解决
- Prototype功能预览一:一个注解实现多项业务处理并行(Fork/Join)
- Prototype功能预览六:业务数据与处理代码集中管理的工作流水线
- Prototype功能预览七:一个注解分离日志及事件的发送于处理逻辑
- 利用spring完美解决java中文问题
- Spring MVC 完美解决跨域问题
- app开发中的异步处理(四)
- MyBatis集合Spring(四)之使用Spring处理事务
- MyBatis集合Spring(四)之使用Spring处理事务
- 解决osgi spring 事务配置问题
- Spring+SpringMvc解决事务无效问题
- Spring中的@Async注解 异步任务处理
- 【解决Win7缩略图预览功能无法使用问题】
- 解决: Spring @Async无法实现异步问题
- spring框架(四)——Spring中的事务控制
- 集群基础-----(iscsi远程共享存储)
- bootstrap分页的要求也适用于基本分页
- I/O阻塞非阻塞与异步 epoll总结 ET/LT AStar提速
- 抄的camera流程
- HDU
- Prototype功能预览四:异步处理-完美解决Spring中的事务问题
- jQuery 导入库和使用格式
- 大数类
- STL中的nth_element()方法的使用
- gcc和makefile(一)
- first
- Kotlin——继承
- 喷水装置(一)
- 喷水装置(二)