spring 事物面试题
一、事物注解:Transactional注解有一个属性propagation
required 它是默认会在现有事物中运行,即当前存在事物,则加入该事物中运行,若没有事情,则新建一个自己的事物,并在里面运行
requird_new区别:它表示必须新建一个事物,并在自己的事物中运行。
二、在多数据源情况下,如何保证数据的一致性(即一个事物中,有多个不同数据源数据提交,如何保证事物提交和回滚)
解决:
1、在spring项目启动的时候直接配置两个不同的数据源,不同的sessionFactory。在dao 层根据不同业务自行选择使用哪个数据源的session来操作。
2、配置多个不同的数据源,使用一个sessionFactory,在业务逻辑使用的时候自动切换到不同的数据源,有一个种是在拦截器里面根据不同的业务现切换到不同的datasource;有的会在业务层根据业务来自动切换。但这种方案在多线程并发的时候会出现一些问题,需要使用threadlocal等技术来实现多线程竞争切换数据源的问题。

浙公网安备 33010602011771号