【问题标题】:How to use a properties file outside of WEB-INF directory?如何使用 WEB-INF 目录之外的属性文件?
【发布时间】:2015-06-29 06:29:46
【问题描述】:

我有一个 Spring MVC 项目(使用 maven 创建),我花了一整天的时间试图找到一种方法来使用 WEB-INF 目录之外的属性文件。

例如我试图将它放在资源目录中,但这根本不起作用。

如果我将属性文件放在src/main/resources 目录中,则项目的编译会将这个文件放在target/{project name}/WEB-INF/classes 目录中,因此org.springframework.context.support.ReloadableResourceBundleMessageSource bean 无法从那里读取它。

如果我将属性文件放在WEB-INF 目录中,那么该文件将被复制到target/{project name}/WEB-INF 目录中并且ReloadableResourceBundleMessageSource bean 可以读取它。

当我将属性文件放在WEB-INF 目录之外时,我有什么方法可以使用它,例如在资源目录中?

【问题讨论】:

  • 所以我在这个链接中看到 ReloadableResourceBundleMessageSource 只使用 WEB-INF 中的属性文件。我应该使用另一个 spring 框架类吗?

标签: java spring maven spring-mvc


【解决方案1】:

您可以将basenames 设置为ReloadableResourceBundleMessageSource。来自#setBasenames 文档:

设置一个基本名称数组,每个基本名称都遵循不指定文件扩展名或语言代码的基本 ResourceBundle 约定,但与引用 Spring 资源位置的 ResourceBundleMessageSource 形成对比:例如“WEB-INF/messages.properties”、“WEB-INF/messages_en.properties”等的“WEB-INF/messages”

还支持 XML 属性文件:.g. “WEB-INF/messages”也会找到并加载“WEB-INF/messages.xml”、“WEB-INF/messages_en.xml”等。

解析消息代码时将依次检查关联的资源包。请注意,由于顺序查找,先前资源包中的消息定义将覆盖后续资源包中的消息定义。

如果你使用的是 XML 配置,你可以这样使用:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
        p:basenames="classpath:localization/messages" />

在 java 配置中将如下所示:

@Bean
public ReloadableResourceBundleMessageSource messageSource() {
    final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    // other configurations
    messageSource.setBasenames("classpath:localization/messages");
    return messageSource;
}

将使用localization 目录中名为messages*.* 的类路径上的所有properties 文件。在 java 项目中,它们位于src\main\resources\localization

【讨论】:

  • 它正在工作。剩下的唯一奇怪的是来自 intellij idea 的红色标记。如果我删除字符串的 'classpath:' 部分,ide 停止抱怨它,但不使用属性文件由项目。并且在所有可能的情况下(即使正确使用属性)如果我输入属性文件 IntelliJ Idea 抱怨属性未使用!
  • @skiabox 我不知道 intellij,可能是 XML 验证,不是吗?
  • 也许我应该在他们的论坛上发帖。无论如何,谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 2023-03-14
  • 2015-10-17
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多