面试:Spring事务管理

来源:互联网 发布:12345宿迁网络问政 编辑:程序博客网 时间:2024/06/05 21:18

很久没有看理论知识,甚至于丢掉了基础知识。这个问题当你为寻找一份体面的工作时尤其突出。

 

接到一个电话面试,面试官问这样一个问题:spring如何进行事务管理?这个怎么说呢,难道是讲tx:advice,aop:config,这些太具体了,上机配置还能OK,电话里我就说不出来了,支支吾吾半天想起spring配置Propagation应该算是事务管理,就说了6个级别......后面可想而知,面试得一蹋糊涂。

 

这都怪平时基础不扎实,理论不深入,都是只是为了完成任务而工作造成的。就像这个propagation的中文名称叫传播行为,虽然看着propagation.***那7个传播行为知道对应的事务处理过程,如propagation。PROPAGATION_MANDATORY就知道是配了它就不能在非事务控制的类里头直接调用了,因为它是必须在一个事务里头的。这个是实际工作经验了,但是在面试的时候却往往很难派上用场,因为你很难想起--工作经验是存在大脑数据库里的触发器,它需要在特定的场合才会触发;面试时更多需要的是理论。

 

懊恼得要死,为失去一个愿意去为之工作余生的工作机会一夜难以入睡......天亮以后,头晕晕的,开始查找答案,答案如下(不是标准答案,仅个理解):

 

粗一点来讲,就是spring的事务管理分为编程式的事务管理与声明式的事务管理;所有事务管理都抽象为事务操作管理类(PlatformTransactionManager),事务状态(TransactionStatus)和定义了事务的传播行为和隔离级别的类(TransactionDefinition)这三个接口;

 

再细点来说,spring有三种事务管理的配置方式:

1 用TransactionFactoryBean代理dao事务处理;

2 用aop:config声明要进行事务增强的切面,用tx:advice声明具体方法的事务属性(传播行为,隔离级别,是否可读,抛出异常是否回滚)及应用的事务管理器;

3 用@Transactional注解配置事务管理;

 

spring的事务管理器有:

与hibernate集成的话用hibernateTransactionManager, 直接使用jdbc用datasourceTransactionManager,如果要把事务管理委托给底层应用服务器的JTA实现就用JtaTransactionManager;

 

这样自己把spring的事务管理知识梳理了一遍以后,对spring的理解也更深入了。

原创粉丝点击