数据库中的Spring配置

时间:2010-10-12 09:08:45

标签: java spring

我们有一个部署了120次的应用程序,每个应用程序的配置略有不同。我们希望将配置存储在数据库中,以便进行审计和管理。

如何在不使用XML的情况下直接从数据库中实例化Spring bean?

由于

4 个答案:

答案 0 :(得分:10)

你不能没有零配置(除非你使用JavaConfig,在你的情况下不会有所不同)。您可以将其中一些外部化到数据库,并使用自定义PropertyPlaceholderConfigurer。请参阅this article了解如何实现这一目标。

答案 1 :(得分:2)

@ Bozho的建议几乎肯定是最实用的解决方案,特别是如果部署之间的差异很小并且可以通过简单的标量属性表达。

另一种方法是编写自己的BeanFactory实现。这是一项非常重要的练习,您希望确保它是您所需要的。一个好的起点是查看XmlBeanFactory的源代码,然后编写自己的(也许是DatabaseBeanFactory),它可以做类似的事情,但是从数据库中获取bean定义,而不是从本地获取XML文件。

不过,这将是一项额外的工作。

答案 2 :(得分:2)

如果是Web应用程序:

编写自定义ServletContextListener实现,该实现在应用程序启动时使用数据库值填充Properties实例,并将其传递给Spring的PropertyPlaceholderConfigurer。有关完整的工作示例,请参阅此帖子:http://blog.javaforge.net/post/31720600427/configuring-spring-based-web-application-from-database

答案 3 :(得分:1)

有一些选项比skaffman的建议更简单:

  • 如果您的配置以XML格式存储在数据库中,则可以通过覆盖AbstractApplicationContext.getResource()来实现自定义资源提取策略,以便可以从数据库加载XML配置。有关示例代码,请参阅here。使用此方法,您还可以动态生成XML配置。

  • 如果您的配置存储在“反汇编”表单中,则可以使用以下方法之一构建BeanDefinition并在初始化上下文期间将其添加到BeanDefinitionRegistry:< / p>