我有两个messages.properties
个文件。一个位于resources
内,另一个位于我的.jar文件之外的etc
目录中。
这是我的PropertiesConfiguration类:
@Configuration
public class PropertiesConfiguration {
@Bean
public PropertyPlaceholderConfigurer properties() {
final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setIgnoreResourceNotFound(true);
final List<Resource> resourceLst = new ArrayList<Resource>();
resourceLst.add(new FileSystemResource("etc/application.properties"));
resourceLst.add(new FileSystemResource("etc/messages.properties"));
resourceLst.add(new FileSystemResource("etc/messages_et.properties"));
ppc.setLocations(resourceLst.toArray(new Resource[]{}));
return ppc;
}
}
在日志中我看到了:
11:18:43.764 INFO [main] PropertyPlaceholderConfigurer - Loading properties file from file [C:\Users\deniss\IdeaProjects\repgen\etc\application.properties]
11:18:43.764 WARN [main] PropertyPlaceholderConfigurer - Could not load properties from file [C:\Users\deniss\IdeaProjects\repgen\etc\application.properties]: etc\application.properties (The system cannot find the file specified)
11:18:43.764 INFO [main] PropertyPlaceholderConfigurer - Loading properties file from file [C:\Users\deniss\IdeaProjects\repgen\etc\messages.properties]
11:18:43.764 INFO [main] PropertyPlaceholderConfigurer - Loading properties file from file [C:\Users\deniss\IdeaProjects\repgen\etc\messages_et.properties]
据我所知,messages.properties
中的etc
已加载。虽然应用程序正在运行时,但不使用它的值。它们来自我的messages.properties
项目文件夹中的默认resources
。我做错了吗?
答案 0 :(得分:1)
我的解决方法是:
@Configuration
public class SpringConfiguration {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("file:/path/to/file/messages");
messageSource.setCacheSeconds(10); //reload every 10 sec..
return messageSource;
}
}
它对我来说很完美,请记住省略基本名称的后缀_et.properties ,例如,如果您有一个名为messages_et.properties
的文件,则设置的基本名称将为:{{ 1}}
答案 1 :(得分:0)
我认为这个问题有一个答案: Spring Boot and multiple external configuration files
这对我来说比较早,所以值得尝试一下!
答案 2 :(得分:0)
首先,明确Spring Boot的配置设置。
在POM.XML中,确认一次布局为&#34; ZIP&#34;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <!-- added -->
<layout>ZIP</layout> <!-- to use PropertiesLaunchar -->
</configuration>
</plugin>
</plugins>
</build>
因为,对于PropertiesLauncher,布局是&#34; ZIP&#34;并确保避免使用@EnableAutoConfiguration。
或使用外部属性的@PropertySource注释。 (参见:Spring Boot PropertySource)。
StackOverflow已经讨论过这个主题。
参考:
Spring @Configuration file with PropertyPlaceholderConfigurer bean doesn't resolve @Value annotation