2010-10-12 126 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