繁体   English   中英

如何加载属性文件中的所有键/值对

[英]How to load all key/value pairs in properties file

我正在尝试在我的属性文件中加载所有key/value对。

一种方法是我手动使用@Value加载所有属性,但为此我应该知道所有键。

我不能这样做,因为将来可能会更改属性文件以包含更多的key/value对,我可能需要再次修改code以适应它们。

第二种方法是我应该如何加载属性文件并迭代它以加载所有key/value对而不知道键。

假设我有以下属性文件sample.properties

property_set.name="Database MySQL"
db.name=
db.url=
db.user=
db.passwd=

property_set.name="Database Oracle"
db.name=
db.url=
db.user=
db.passwd=

这就是我想要做的

@Configuration
@PropertySource(value="classpath:sample.properties")
public class AppConfig {
    @Autowired
    Environment env;

    @Bean
    public void loadConfig(){
    //Can I some how iterate over the loaded sampe.properties and load all
    //key/value pair in Map<String,Map<String, String>>
    // say Map<"Database MySQL", Map<key,vale>>
    // I cannot get individual properties like env.getProperty("key"); 
    // since I may not know all the keys
}
}

Spring将所有属性存储在Environment Environment包含PropertySource集合。 每个PropertySource包含特定来源的属性。 有系统属性,java环境属性等等。 您文件中的属性也将存在。

任何来源都有自己的名字。 在您的情况下,自动生成的名称将类似于"class path resource [sample.properties]" 如您所见,名称不太方便。 所以让我们设置更方便的名称:

@PropertySource(value="classpath:sample.properties", name="sample.props")

现在您可以通过此名称获取源代码:

AbstractEnvironment ae = (AbstractEnvironment)env;
org.springframework.core.env.PropertySource source =
                              ae.getPropertySources().get("sample.props");
Properties props = (Properties)source.getSource();

请注意,我指定了PropertySource类的全名,以避免与@PropertySource注释类冲突。 之后,您可以使用属性。 例如,将它们输出到控制台:

for(Object key : props.keySet()){
   System.out.println(props.get(key));
}

您可以在包含方法getPropertyNames()EnumerablePropertySourceautowire

你可以在jdk api中查找类Properties并使用方法load(InputStream inStream)

InputStream in = new FileInputStream("your properties location");
Properties prop = new Properties();
prop.load(in);

ps:prop是HashTable的subClass,不要忘记关闭流

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM