访问属性文件时Spring引导java.util.MissingResourceException

时间:2017-07-05 16:37:10

标签: java spring spring-boot

在spring boot应用程序中,我有以下代码用于访问属性文件(errors.properties),当我访问代码时,它给出了以下异常:

exception":"java.util.MissingResourceException","message":"Can't find bundle for base name errors.properties

errors.properties文件位于src / main / resources /

以下是代码

@Configuration
@PropertySource("classpath:errors.properties") // tried with both the annotations
@ConfigurationProperties("classpath:errors.properties") //  tried with both the annotations
public class ApplicationProperties {

    public static String getProperty(final String key) {
        ResourceBundle bundle = ResourceBundle.getBundle("errors.properties");
        return bundle.getString(key);
    }
}   

我无法理解为什么它没有拿起资源文件夹下的errors.properties文件,有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

此问题并非特定于Spring Boot,因为ResourceBundle抛出异常 使用ResourceBundle.getBundle()方法时,不应该根据documentation指定文件的扩展名,它会自动附加。

所以正确的用法是:

<div class="field">
    <%= f.label field.to_sym %><br>
    <%= f.cktext_area field.to_sym %>
</div>

注意:对于Spring Boot中的本地化,您可能应该使用MessageSource而不是Java ResourceBundle。

PropertySource注释可能有效,否则会在上下文启动时抛出异常(因为ignoreResourceNotFound未设置为false),您可以使用@Value注释将error.properties文件中的值注入任何Spring bean。 例如

ResourceBundle.getBundle("errors");

如果您看不到属性值,请确保您的ComponentScan包含此配置。

或者你可以直接将Environment注入bean并按照Sudhakar的回答使用getProperty()。

答案 1 :(得分:0)

这可能有助于从属性文件中获取值。但是支持i18n可能没用。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * This class loads the property file and returns the property file values.
 *
 */
@Component
@Configuration
@PropertySource("classpath:errors.properties")
public class ApplicationProperties {

    @Autowired
    private Environment env;

    public static String getProperty(final String key) {
        return env.getProperty(key, "");
    }
}