spring 事物面试题

一、事物注解:Transactional注解有一个属性propagation

required 它是默认会在现有事物中运行,即当前存在事物,则加入该事物中运行,若没有事情,则新建一个自己的事物,并在里面运行

requird_new区别:它表示必须新建一个事物,并在自己的事物中运行。

 

二、在多数据源情况下,如何保证数据的一致性(即一个事物中,有多个不同数据源数据提交,如何保证事物提交和回滚)

解决:

1、在spring项目启动的时候直接配置两个不同的数据源,不同的sessionFactory。在dao 层根据不同业务自行选择使用哪个数据源的session来操作。

2、配置多个不同的数据源,使用一个sessionFactory,在业务逻辑使用的时候自动切换到不同的数据源,有一个种是在拦截器里面根据不同的业务现切换到不同的datasource;有的会在业务层根据业务来自动切换。但这种方案在多线程并发的时候会出现一些问题,需要使用threadlocal等技术来实现多线程竞争切换数据源的问题。

posted @ 2018-04-04 15:55  坏笑的眼镜男  阅读(547)  评论(0)    收藏  举报