在多个属性文件中查找消息

时间:2017-07-30 07:53:53

标签: java spring resourcebundle

在应用程序中,有多个属性文件用于管理异常消息,警报和其他一些文本,这些文件如下: - core-message.properties - databaseException.properties ......

服务层中的

可能是数据库调用发生,数据库返回存在于属性文件中的一个键,我想获取值并将异常消息提升到用户界面层。

如果我知道wich属性文件中的密钥代码将是这样的:

@Value("#{core['theExceptionKey']}") 
public String excpetionMessage; 

private void myMethod() {
throw new ExceptionClass(exceptionMessage);
}

我认为spring可以做到这一点,因为当我使用spring:jsp文件中的消息标签时,spring不知道女巫文件中的密钥,但是它正确地加载了消息。

2 个答案:

答案 0 :(得分:1)

您可以使用Spring Environment抽象。

首先,您需要将属性源添加到Java配置文件

@Configuration
@PropertySource("classpath:/com/mypacakge/core-message.properties")
public class AppConfig { 

或者,如果您有多个属性文件

@Configuration
@PropertySources({
    @PropertySource("classpath:core-message.properties"),
    @PropertySource("classpath:database.properties")
}) 
    public class AppConfig { 

PropertySourceConfigurer添加到Java配置文件

 @Bean
 public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
 }

现在让我们在core-message.properties中说明您有以下数据

message.name=Hello

您可以通过自动装配Environment抽象然后调用env.getProperty()

在任何bean中检索此数据
@Autowired
Environment env;

public void m1(){
String message = env.getProperty("message.name")` // will return Hello

Environment object提供了配置属性源和解析属性的接口。它提供了从各种源读取的便利:属性文件,系统环境变量,JVM系统属性,servlet上下文参数等,这非常有用。例如:

    environment.getSystemProperties().put("message", "Hello");
    System.getProperties().put("message", "Hello");

    environment.getSystemProperties().get("message"); // retrieve property
    environment.getPropertySources() // allows manipulation of Properties objects

Spring Reference Documentation - Environment

答案 1 :(得分:0)

要以编程方式获取密钥的值,您可以使用以下命令:

@Autowired
private Environment env;
...
String something = env.getProperty("property.key.something");