簡體   English   中英

MyBatis-Spring多數據源配置緩存問題

[英]MyBatis-Spring multi-datasource configuration cache issues

使用mybatis-3.1.0,spring-3.1.1.RELEASE和mybatis-spring-1.1.0,我們在多數據源配置中面臨一些令人討厭的緩存問題。

出於安全原因,我們有指向相同數據庫和架構的單獨數據源,每個數據源使用不同的憑據。 目標是使用僅具有執行選擇權限的選擇權限的db用戶,具有執行dml操作的插入/更新/刪除權限的另一位用戶,等等。

為此,我們配置了三個單獨的SqlSessionFactoryBeans,每個數據源一個。 問題來了:使用“ DML”會話執行插入操作時,不會刷新“ SELECT”會話的本地緩存。 因此,例如,我們在用戶列表中看不到新創建的用戶。

所以我的問題是:我們是否可以同時配置與所有三個數據源關聯的單個SqlSessionFactoryBean?

更新:

經過更多調試之后,看來核心問題實際上與事務管理相關。 站點中的某些操作涉及多項操作,並且這些操作是通過不同的數據源執行的。 看來我們沒有正確配置事務管理器,並且其中一項或多項操作被排除在提交之外。 經過幾次嘗試后,由於連接已耗盡,數據庫操作完全混亂了。

因此,現在的問題是,如何配置單個事務管理器來處理所有涉及的數據源?

給定的sqlSessionFactory僅可以關聯一個數據源。 但這不是主要問題。 主要問題是本地緩存與mybatis會話相關聯 因此,當您使用兩個不同的會話時,您將擁有兩個不同的本地緩存-每個會話一個,而擁有一個sqlSessionFactory則無濟於事。

您可能應該考慮的選項是為只讀會話設置localCacheScope = STATEMENT。 在這種情況下,它不會在執行查詢后緩存結果。 為了仍然能夠使用緩存,請為某些全局配置的緩存或使用全局緩存(例如ehcache)的現有緩存適配器使用自定義適配器配置二級緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM