【发布时间】:2014-07-25 08:16:18
【问题描述】:
使用 mybatis-3.1.0、spring-3.1.1.RELEASE 和 mybatis-spring-1.1.0,我们在多数据源配置中面临一些令人讨厌的缓存问题。
出于安全原因,我们有不同的数据源指向相同的数据库和架构,每个数据源使用不同的凭据。目标是使用一个只有选择权限的 db 用户进行选择,另一个具有插入/更新/删除权限的用户进行 dml 操作,等等。
为此,我们配置了三个单独的 SqlSessionFactoryBean,每个数据源一个。问题就来了:当使用“DML”会话执行插入操作时,“SELECT”会话的本地缓存不会被刷新。因此,例如,我们在用户列表中看不到新创建的用户。
所以我的问题是:我们有什么方法可以同时配置与所有三个数据源关联的单个 SqlSessionFactoryBean?
更新:
经过更多调试,看起来核心问题实际上与事务管理有关。站点中的某些操作涉及多个操作,这些操作是通过不同的数据源执行的。看起来我们没有正确配置事务管理器,并且其中一个或多个操作被排除在提交之外。多次尝试后,由于连接耗尽,数据库操作变得一团糟。
那么,现在的问题是,如何配置单个事务管理器来处理所有涉及的数据源?
【问题讨论】:
-
您是否尝试过在您的选择语句中设置flushCache=true?
-
将 flushCache 设置为 true 将无济于事,因为在执行 select 之后不会清除缓存。
标签: spring caching transactions mybatis