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