2009-11-23 32 views
4

我目前正在爲現有的基於Spring的應用程序構建一個CRUD工具。 該應用程序作爲一個JAR庫被包含在Grails應用程序中,它似乎工作正常。在我服務Grails與另一個Spring應用程序集成 - dataSource被超載

def ctx = new ClassPathXmlApplicationContext('classpath:/applicationContextName.xml') 

要利用圖書館自身的春天上下文的,我用來通過加載它。不幸的是,上下文建立自己的數據源(庫的默認值),這是不好的,因爲我需要使用Grails中定義的dataSource。

因此,我的解決方案是通過向grails-app \ conf \ spring \ resources.xml文件添加一個導入來僅包含庫的Spring配置和Grails上下文。

這似乎所有的bean被裝載到同樣的情況下工作(在這麼多,我現在就可以通過使用def variableName直在我的服務類自動裝配的bean。

不幸的是,在圖書館的定義的數據源spring配置過載了在我的Grails DataSource.groovy文件中定義的dataSource!

有沒有什麼辦法可以告訴Grails首先加載libary的spring配置,然後它會被其餘的grails配置覆蓋(因此使用Grails的DataSource)?

感謝您的幫助,

詹姆斯

...

作爲tenporary措施,我已刪除的扶養的Spring配置文件中的數據源條目及其豆已經注入由創建的數據源Grails配置 - 雖然這並不理想,因爲我不得不做一個「特殊」版本的依賴jar。

回答

1

我會考慮製作一個包含你的庫的簡單插件,並讓它在dataSources插件之前加載(在你* Plugin.groovy文件中使用def loadBefore = ['datasources'])。

每個插件都有一個doWithSpring鉤子,它允許您將Bean添加到上下文中(您可以在其中包含現有的context.xml)。

作爲額外的獎勵,將使其更容易重新下一次使用圖書館:)

歡呼

+0

好答案!我相信這會很好地解決這個問題。我不再有兩個數據源(我刪除了依賴關係,並重新編碼了我需要的位),所以不幸的是我無法對此進行測試。 – 2010-01-08 10:16:20

0

一個簡單的解決方案,可以導入在應用程序上下文Grails上下文(resources.xml)然後有兩個選項。您可以將應用程序的de數據源重命名爲不同於Grails的數據源,或者您可以從應用程序中刪除數據源,並使用Grails中的一個Grails部分。 解決方案之間的區別在於兩個數據源是否連接到同一個數據庫。

+0

有兩個數據源,因爲那時我需要連接到兩個不同的數據庫。暫時的解決方案就是你所說的 - 從依賴的數據源被命名爲不同於grails中定義的數據源,這允許我有2個。 – 2010-01-08 10:17:33

相關問題