【问题标题】:ResourceBundleViewResolver - read property file that does not exist on classpathResourceBundleViewResolver - 读取类路径中不存在的属性文件
【发布时间】:2013-08-30 13:10:01
【问题描述】:

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

不重新部署战争的原因: 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 的值而无需重新启动服务器将很棒.

感谢您的宝贵时间。

【问题讨论】:

  • 您能否更新您的问题以解释为什么在更改配置后不重新部署应用程序很重要?这将帮助我为您提供更好的答案。
  • Rob - 请找到我更新的问题。谢谢。
  • 您是否尝试过不使用类路径加载器而是使用直接路径?或者在类路径中添加一个目录来保存配置项?或者,更好的是,如果你只是在谈论你的资源包,为什么不编写一个自定义的来从数据库而不是类路径中的文件读取消息。我的公司就是这样做的。
  • CodeChimp - 我尝试使用直接外部路径和一些前缀:文件路径和文件#,但没有奏效。不太确定这是否接近但无法找到任何帖子或使用外部文件系统来满足我的要求的弹簧参考。 filepath:/home/user/dev/properties/views list> 也尝试使用 systemenvironment file:#{systemEnvironment['RESOURCE_PATH']}/views。不想使用数据库。

标签: spring-mvc resourcebundle


【解决方案1】:

我的回答分为两部分。

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2013-02-13
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多