如何在WEB-INF目录之外使用属性文件?

时间:2015-04-21 21:19:35

标签: java spring maven spring-mvc

我有一个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目录之外,例如在资源目录中时,我有什么方法可以使用属性文件吗?

1 个答案:

答案 0 :(得分:3)

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

  

设置一个基本名称数组,每个基本名称遵循不指定文件扩展名或语言代码的基本ResourceBundle约定,但与引用Spring资源位置的ResourceBundleMessageSource相反: " WEB-INF /消息" for" WEB-INF / messages.properties"," WEB-INF / messages_en.properties"等

     

还支持XML属性文件:.g。 " WEB-INF /消息"将查找并加载" 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;
}

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