2017-07-05 89 views
1

在春季啓動應用程序,我有下面的代碼用於訪問屬性文件(errors.properties),當我訪問代碼,它給出了下面exeception春天開機java.util.MissingResourceException在訪問屬性文件

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

的errors.properties文件是在src /主/資源/

下面是代碼

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

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

我無法理解爲什麼它沒有選擇資源文件夾下的errors.properties文件,有人可以幫我嗎?

回答

0

這可能對從屬性文件獲取值有用。但支持國際化可能沒有用處。

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, ""); 
    } 
} 
+0

給出:500,「錯誤」:「內部服務器錯誤」,「異常」:「java.lang.NullPointerException」,「消息」:「無消息可用」,該條目在屬性文件中可用但仍給出空指針 – user1245524

+0

@Autowired private static Environment env; env變量變爲空而不是自動裝配 – user1245524

+0

感謝它的工作,如果我想要使用環境變量加載多個屬性文件怎麼辦?我應該在@PropertySource註釋中聲明多個文件 – user1245524

1

此問題不是特定於Spring Boot,因爲ResourceBundle引發了異常。
使用ResourceBundle.getBundle()方法時,您不應該指定基於documentation的文件的擴展名,它會自動附加。

所以,正確的用法是:

ResourceBundle.getBundle("errors"); 

注:在春季啓動本地化你應該使用的MessageSource而不是Java資源包。

PropertySource註釋可能工作,否則它會在上下文啓動時拋出異常(因爲ignoreResourceNotFound未設置爲false),您可以使用@Value註釋將error.properties文件中的值注入到任何Spring豆。 例如

@Configuration 
@PropertySource("classpath:error.properties") 
public class ApplicationProperties { 

    @Value("${property.in.errors.properties}") 
    private String propertyValue; 

    @PostConstruct 
    public void writeProperty() { 
     System.out.println(propertyValue); 
    } 
} 

如果你不能看到屬性值,確保您的ComponentScan包括此配置。

或者,您可以直接將Environment注入到bean中,並根據Sudhakar的回答使用getProperty()。