在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文件,有人可以帮帮我吗?
答案 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, "");
}
}