Spring Boot:正在添加外部messages.properties但未使用

时间:2016-12-01 09:30:31

标签: java spring-boot properties-file

我有两个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。我做错了吗?

3 个答案:

答案 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 Boot: Is it possible to use external application.properties files in arbitrary directories with a fat jar?

Spring @Configuration file with PropertyPlaceholderConfigurer bean doesn't resolve @Value annotation