Hibernate Spring 多資料來源 怎麼弄

2025-04-08 21:35:21 字數 2391 閱讀 1317

1樓:匿名使用者

dao 在訪問 sessionfactory 的時候都不得不在多個資料來源中不斷切換,問題就出現了:如何讓 sessionfactory 在執 行資料持久化的時候,根據客戶的需求能夠動態切換不同的資料來源?我們能不能在 spring 的框架下通過少量修改得到解決?

是否有什麼設計模式可以利用 呢?

問題的分析。

我 首先想到在 spring 的 applicationcontext 中配置所有的 datasource 。這些 datasource 可能是各種 不同型別的,比如不同的資料庫: oracle 、 sql server 、 mysql 等,也可能是不同的資料來源:

比如 apache 提供的 、 spring 提供的 等。然後 sessionfactory 根據客戶的 每次請求,將datasource 屬性設定成不同的資料來源,以到達切換資料來源的目的。

但 是,我很快發現乙個問題:當多使用者同時併發訪問資料庫的時候會出現資源爭用的問題。這都是「單例模式」惹的禍。

眾所周知,我們在使用 spring 框架 的時候,在 beanfactory 中註冊的 bean 基本上都是採用單例模式,即 spring 在啟動的時候,這些 bean 就裝載到記憶體中, 並且每個 bean 在整個專案中只存在仔巨集乙個物件。正因為只存在乙個物件,物件的所跡祥有屬性,更準確說是例項變數,表現得就如同是個靜態變數(實際上「靜 態」與「單例」往往是非常相似的兩個東西,我們常常用「靜態念州冊」來實現「單例」)。拿我們的問題來說, sessionfactory 在整個專案中只有一 個物件,它的例項變數 datasource 也就只有乙個,就如同乙個靜態變數一般。

如果不同的使用者都不斷地去修改 datasource 的值,必然 會出現多使用者爭用乙個變數的問題,對系統產生隱患。

2樓:網友

我自己用的是hibernate+tomcatjdbc,通過spring管理。

為什麼用spring來管理hibernate

3樓:最愛寂寞的刺蝟

可以看出,hibernate操作的步驟如下:

1.獲得configuration物件。

2.建立sessionfactory

3.建立session

4.開啟事務。

5.進行持久化操作。比如上面的新增使用者操作。

6.提交事務。

7.發生異常,回滾事務。

8.關閉事務。

使用hibernate進行訪問持久層,每次都要進行這八個步驟。但是若使用spring對hibernate進行管理,又是怎麼樣的呢?

首先,spring對hibernate提供了hibernatetemple類。這個模版類對session進行封裝。並且spring會預設為自動提交事務。

所在在dao層直接寫入即可。

在實踐中,遇到了乙個問題,無法插入資料庫,經過一番折騰,多次實驗,驗證,總結一下原因,結果如下:

注意:所有的操作都必須在事務中進行。若單純的使用hibernate,則事務需要手動開啟提交關閉操作。當然也可以在hibernate配置檔案中,自動提交。

若使用spring管理hibernate,則預設的是自動提交事務。但是在此,需要注意的是:若使用spring在配置檔案中配置資料來源而不使用,則可以成功插入資料庫,因為hibernatetemple預設提供自動提交事務。

在spring的配置檔案配置資料來源如下:使用此資料來源需要的jar如下:,update

- 如果採用傳統的的方式,可以採用如下方式來簡化註冊的步驟,並且class為localsessionfactorybean-->

4樓:感性的熱一天

為什麼要用spring來管理hibernate呢?我們可以參考以下步驟。 首先我們來看一下hibernate進行操作的步驟。

比如新增使用者的乙個步驟。在此為了解釋提出的問題,只做乙個截圖,若想看完整**示例。

為什麼用spring來管理hibernate

5樓:福喜

update

若spring中不是直接配置資料來源,而是使用,則是無法若直接,則無法插入資料庫中,但是可以儲存中快取中。因為所有的操作都是在事務中執行的,而資料來源則預設是不是自動提交的。解決的辦法如下:

可以在中填寫:

true以下spring使用資料來源。

html] view plaincopyprint?

以上,介紹了spring來管理hibernate的好處在於,不用手動建立sessionfactory,session,不用手動開啟提交關閉事務,這一切完全都是由spring來管理。並且spring還提供了hibernatetemple的工具,使一切操作簡單方便。

dao層在spring配置檔案中配置如下:

html] view plaincopyprint?