我目前正在开发一个Web应用程序。我知道Spring的一些基础知识,但是我并没有那么多地使用它,因此我决定提高我的Spring技能,而且我遇到了一个问题,我无法找到一个好的解决方案。
我想在我的应用程序中实现一个功能,允许用户配置所有内容而无需触及任何配置文件(例如spring bean),基本上想要部署,启动和使用应用程序的人应该只复制.WAR文件进入例如tomcat,所有配置都应该在app中完成(例如在OpenFire中)。
所以我想用户部署应用程序转到某个URL并且一切都是通过UI完成的,一旦所有细节都被提供,他会被问及一些参数(例如数据库连接细节),所有细节都存储在cfg文件中,app重新启动并且配置过程结束了。
我想在spring bean中拥有所有配置细节,但我发现我无法以编程方式真正更改它们(一种解决方案是修改文件'out of spring'并在病房后重新加载应用程序上下文 - 那是好方法吗?)。 另一个是在WEB-INF中存储xml文件,并在从用户收集数据后保存数据,但是如何将数据从非bean文件加载到应用程序上下文中?
任何建议都适用!
答案 0 :(得分:2)
您可以将这些值保留在属性文件中。您可以在spring bean中使用属性文件值 您还可以使用通过UI接受的用户输入更新属性文件中的值。
答案 1 :(得分:0)
您可以通过ApplicationContext
类及其子类访问ever bean。从这里开始,你可以在所有的bean上调用getter和setter来获取proeprties;但值得注意的是,应用程序上下文已经创建,BeanFactory
也是如此,因此您将错过一些生命周期步骤。
在您自己的bean上设置与生命周期无关的属性肯定是可行的,但我不建议在设置上下文后尝试更改“基础架构”bean的属性(例如事务管理,包扫描)起来并开始了。
如果您的目标用户是天真的用户,也许您可以提供修改属性文件的功能,然后以编程方式重新加载Web应用程序,并让您的Spring上下文使用PropertyPlaceholderConfigurer
或{{1加载其属性}}
如果您的目标用户是“内部”精通IT的用户,那么您也可以使用JMX,它允许您使用PropertyOverrideConfigurer
或类似内容更改上下文中每个bean的属性。 / p>