4

我目前正在开发一个网络应用程序。我知道 Spring 的一些基础知识,但是我并没有太多地使用它,因此我决定提高我的 Spring 技能,但我遇到了一个我无法真正找到好的解决方案的问题。

我想在我的应用程序中实现一个功能,允许用户在不接触任何配置文件(例如 spring bean)的情况下配置所有内容,基本上想要部署、启动和使用应用程序的人应该只复制 .WAR 文件进入例如 tomcat 并且所有配置都应该在应用程序中完成(例如在 OpenFire 中)。

所以我想用户将应用程序部署到某个 URL 并且一切都通过 UI 完成,一旦所有详细信息都存储在 cfg 文件中,应用程序重新启动和配置,他就会被询问一些参数(例如数据库连接详细信息)过程结束。

我想在 spring bean 中拥有所有配置细节,但我发现我不能真正以编程方式更改它们(一种解决方案是修改文件'out of spring'并在病房后重新加载应用程序上下文 - 是好方法?)。另一种方法是将 xml 文件存储在 WEB-INF 中,并在从用户那里收集数据后将数据保存在那里,但是如何将非 bean 文件中的数据加载到应用程序上下文中?

任何建议appriciated!

4

2 回答 2

2

您可以将这些值保存在属性文件中。您可以在spring bean中使用属性文件值。
您还可以使用通过 UI 接受的用户输入来更新属性文件中的值。

于 2012-07-05T08:33:29.537 回答
0

ApplicationContext您可以通过类及其子类访问任何 bean 。从这里,您可以调用所有 bean 的属性的 getter 和 setter;但是值得注意的是,应用程序上下文已经创建,BeanFactory, 所以会有一些你错过的生命周期步骤。

在您自己的 bean 上设置与生命周期无关的属性当然是可行的,但我不建议在设置并启动上下文后尝试更改“基础设施”bean 的属性(例如事务管理、包扫描) .

如果您的目标用户是一个天真的用户,也许您可​​以提供修改属性文件的功能,然后以编程方式重新加载 Web 应用程序,并让您的 Spring 上下文使用PropertyPlaceholderConfigureror加载其属性PropertyOverrideConfigurer

如果您的目标用户是“内部”精通 IT 的用户,那么您还可以使用 JMX,这将允许您更改上下文中每个 bean 的属性使用jconsole或类似的。

于 2012-07-05T08:41:26.957 回答