我无法使用存在于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 thread,http://e-blog-java.blogspot.com/2011/03/how-to-watch-file-system-for-changes-in.html]
3)我工作的公司没有管理员,我希望不那么容易出错,并希望尽可能避免部署战争。
主要是在发布这个问题时,我正在研究为ResourceBundleViewResolver读取外部属性文件,但是如果我还可以获得stackoverflow社区视图,能够在更改后动态读取views.properties中的值而无需重新启动服务器将会很棒
感谢您的时间。
答案 0 :(得分:0)
我的答案分为两部分。
首先,您将无法使用ResourceBundleViewResolver实现您想要的效果。这适用于ResourceBundles,根据定义,它必须在类路径中可用。因此,您必须将views.properties放到类路径中才能工作。
其次是动态重新加载视图分辨率。
您可以使用org.springframework.web.servlet.view.XmlViewResolver
实现所需目标,并确保关闭视图缓存。因此,将views.properties移动到XML配置中并将其放在文件系统上。然而,就处理每个请求的XML配置而言,这可能会相当昂贵。你必须尝试并发现它,但听起来并不理想。
或者,正如已经建议的那样,您可以滚动自己的ViewResolver实现来实现您想要的效果。
然而,我会请你停下来思考你想要做什么。我建议您的生产环境应该是经过良好测试的已知工作状态的快照。在进入生产环境之前,应该测试您正在讨论的更改类型。如果出现问题,您可以立即回滚到上一个已知的工作快照。重新启动服务器是一个小小的痛苦,但实际上你经常需要这样做多少次?我还建议让一个非技术团队将一个已知的工作WAR文件复制到一个特定的位置,这比编辑一个属性文件更不容易出错?