2010-10-12 244 views
5

我們有一個應用程序部署了120次,每個配置略有不同。我們希望將配置存儲在數據庫中以用於審計和管理目的。來自數據庫的彈簧配置

如何在不使用XML的情況下直接從數據庫實例化Spring bean?

感謝

+0

是否要保留連接到數據庫中的數據庫的bean配置...? – 2010-10-12 10:26:20

回答

10

你不能有零XML配置的(除非您使用JavaConfig,不使事情你的情況不同)。您可以將其部分外部化到數據庫,並使用自定義PropertyPlaceholderConfigurer。有關如何實現此目的,請參見this article

+0

那麼,如果你使用新的'@ Configuration' /'@ Bean'風格,你*可以*具有零XML配置。 – skaffman 2010-10-12 10:03:15

+0

@skaffman yes,true。 – Bozho 2010-10-12 10:16:20

2

@ Bozho的建議幾乎肯定是最實際的解決方案,特別是如果部署之間的差異很小並且可以通過簡單的標量屬性表示。

另一種方法是編寫自己的BeanFactory實現。這是一個不平凡的練習,你想確定它是你需要的。一個好的起點是查看XmlBeanFactory的源代碼,然後編寫自己的(DatabaseBeanFactory,也許),它做了類似的事情,但從數據庫中獲取bean定義,而不是從本地XML文件中獲取。

雖然這將是相當多的額外工作。

1

有一些選擇這比skaffman的建議simplier:

  • 如果您的配置存儲在XML格式的數據庫,可以實現自定義資源通過重寫AbstractApplicationContext.getResource()抓取策略,這樣就可以從數據庫加載XML配置。有關示例代碼,請參閱here。使用這種方法,您還可以即時生成XML配置。

  • 如果您的配置保存在「分解」的形式,你可以建立BeanDefinition S和使用下列方法之一上下文的初始化時將它們添加到BeanDefinitionRegistry