Spring 线程安全 和事务管理

SpringMVC就是对javabean-serlvet-jsp这种MVC结构的封装。今天被问道了spring的线程安全问题,一下子暴漏了,没有关注过这个问题。spring也是

Spring 线程安全 和事务管理_第1张图片
单实例+多线程

肯定有线程安全的问题。

Spring 线程安全 和事务管理_第2张图片
问题。

只是自己就没有遇到过的。

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

定义一个util类,所有的controller里面都使用,肯定是会有线程安全的问题的。

先结论:

1:线程安全问题都是由全局变量及静态变量引起的

2:结论

Spring 线程安全 和事务管理_第3张图片
认知

NM,这问题的解决很简单,文章都千篇一律。好文章,问题说透,不使用全局变量,不使用static,涉及到的加锁,使用ThreadLocal都是这几句话。就因为这个,错失JD吗?

一直在讨论的

Spring 线程安全 和事务管理_第4张图片

threadLocal。


事务管理,我的确没有涉及过这个问题。我看自己的spring-mybatis.xml配置数据源的管理

Spring 线程安全 和事务管理_第5张图片
事务管理

哪有什么事务? dao这里都是事务管理器控制的。

@Transtional加上方法即可?我们的都是try-catch这种形式的,出错了怎么办呢?的确没有考虑过这个问题。其实这都是一句话的事情,就是@Transtaional保证本地事务,说一下就可以了。在支付项目里面是都有这个事务管理的,NM,复习一遍也没有什么说的,感觉这就是说话的方式问题呀。

系统来看一下


1:说spring的事务管理,通常都是先理解一下事务的概念,事务的隔离级别。

2:文章千篇一律,虽然不了解,大概也知道。这里说的很清楚

spring的事务管理,事务的定义TransactionDefinition这是最高的接口,所有对事务的理解,都在这里面。然后就是根据各个平台进行的PlatformTransactionManager,最后就是对TransactionStatus,事务的执行过程中的信息获取,查看。就这么简单,三个接口搞定。

最关键的,当然就是PlatformTransactionManager这个接口,为各个平台提供事务管理接口。他提供了统一的编程模型。

Spring 线程安全 和事务管理_第6张图片
持久化自己完成事务

持久化框架自己完成事务管理的。

Spring 线程安全 和事务管理_第7张图片
我们的就这样

到这里就差不多了吧,应用中也就是在Service上面,在方法上面添加上一个@Transactional,别的还有啥呢?

3:理论知识,事务的特性,对应着

Spring 线程安全 和事务管理_第8张图片
事务
Spring 线程安全 和事务管理_第9张图片
OK

这些真不重要,自己完全可以说@Transational即可。事务的隔离级别,这自己知道。但是,事务的传播行为,就是事务方法中继续调用事务的方法,事务的超时,读写,这些是具体的优化。

传播行为,是你一个大事务里面包含小事务,可能小事务成功了,大事务失败了?怎么办,应该就是这一种状态。要形成重入,你有事务,我就不开启事务了,加入你的事务中,你没有事务,我就开启新的事务。可重入锁,这里可重入事务即可。也有级别是说,就开一个新事务,这个事务是大事务的组成部分,这里可以成功的,不影响,简单明了。Y就是没有体会过这些。

4:具体的开发,我们都是声明式的事务管理。就是XML里面配置即可。

就这样
Spring 线程安全 和事务管理_第10张图片
理解

最清晰的一篇文章,足够用了

你可能感兴趣的:(Spring 线程安全 和事务管理)