0

我无法使用存在于 unix 文件系统而不是类路径上的 ResourceBundleViewResolver(例如:views.properties)来读取属性文件。使用 spring-webmvc-3.2.4。我本可以将属性文件放在类路径上(即在 WEB-INF/classes/ 中),但不想在更改属性文件中的单个条目时重新部署战争。

不重新部署war的原因: 1)生产环境偶尔需要更改jsp名称。虽然这种情况很少见,但用于快速解决。

2)我习惯于在属性文件中提及视图名称,重新启动会有所帮助。[我在即将发布的版本中也有点雄心勃勃,但不太确定它可以实现多远。就像,还想实现 WatchService,这有助于避免在属性文件更改时重新启动服务器。不太确定,如何将这个 WatchService 链接到 ResourceBundleViewResolver 但已经看到使用它来阅读 dao.properties 参考的帖子:Spring Bean running in its own threadhttp ://e-blog-java.blogspot.com/2011/ 03/how-to-watch-file-system-for-changes-in.html ]

3)我工作的公司没有管理员,我希望减少出错的可能性,并希望尽可能避免部署战争。

主要是在发布此问题时,我正在考虑读取 ResourceBundleViewResolver 的外部属性文件,但如果我还可以获得 stackoverflow 社区视图,以便能够在更改时动态读取来自views.properties 的值而无需重新启动服务器将是很棒的。

谢谢你的时间。

4

1 回答 1

0

我的回答分为两部分。

首先,您将无法使用 ResourceBundleViewResolver 实现您想要的。这适用于根据定义必须在您的类路径上可用的 ResourceBundles。因此,您必须将 views.properties 放到类路径中才能使其工作。

其次关于动态重新加载视图分辨率。

您可以通过org.springframework.web.servlet.view.XmlViewResolver并确保关闭视图缓存来实现您想要的。因此,将您的 views.properties 移动到 XML 配置中并将其放在文件系统上。然而,就为每个请求处理 XML 配置而言,这可能会变得相当昂贵。您必须尝试并找出答案,但这听起来并不理想。

或者,正如已经建议的那样,您可以滚动自己的 ViewResolver 实现来实现您想要的。

但是,我会要求您停下来考虑一下您要做什么。我建议您的生产环境应该是经过良好测试的已知工作状态的快照。您所讨论的更改类型应在推送到生产环境之前进行测试。如果出现问题,您可以立即回滚到最后一个已知的工作快照。

重新启动服务器是一个小麻烦,但实际上您需要多久执行一次?我还建议让一个非技术团队简单地将已知的工作 WAR 文件复制到特定位置,这样会比编辑属性文件更不容易出错?

于 2013-08-29T10:50:30.527 回答