我需要在地图中读取application.properties文件中的所有属性 在下面的代码中,属性测试具有相应的值,但映射为空。如何在application.properties文件中用值填充“映射”而不在属性中添加前缀。
这是我的application.properties文件
AAPL=25
GDDY=65
test=22
我正在这样使用@ConfigurationProperties
@Configuration
@ConfigurationProperties("")
@PropertySource("classpath:application.properties")
public class InitialConfiguration {
private HashMap<String, BigInteger> map = new HashMap<>();
private String test;
public HashMap<String, BigInteger> getMap() {
return map;
}
public void setMap(HashMap<String, BigInteger> map) {
this.map = map;
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
答案 0 :(得分:2)
这可以使用 PropertiesLoaderUtils 和 @PostConstruct
来实现。请检查以下示例:
@Configuration
public class HelloConfiguration {
private Map<String, String> valueMap = new HashMap<>();
@PostConstruct
public void doInit() throws IOException {
Properties properties = PropertiesLoaderUtils.loadAllProperties("application.properties");
properties.keySet().forEach(key -> {
valueMap.put((String) key, properties.getProperty((String) key));
});
System.err.println("valueMap -> "+valueMap);
}
public Map<String, String> getValueMap() {
return valueMap;
}
public void setValueMap(Map<String, String> valueMap) {
this.valueMap = valueMap;
}
}
答案 1 :(得分:1)
在春季启动中,如果需要从应用程序中获取单个值。属性,只需使用具有给定名称的@Value注释
因此,要获取AAPL值,只需添加这样的类级别属性
@Value("${AAPL}")
private String aapl;
如果您需要将完整的属性文件作为地图加载,我正在使用ResourceLoader将完整的文件作为流加载,然后按以下方式进行解析
@Autowired
public loadResources(ResourceLoader resourceLoader) throws Exception {
Resource resource = resourceLoader.getResource("classpath:myProperties.properties"));
BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()));
String line;
int pos = 0;
Map<String, String> map = new HashMap<>();
while ((line = br.readLine()) != null) {
pos = line.indexOf("=");
map.put(line.substring(0, pos), line.substring( pos + 1));
}
}
答案 2 :(得分:0)
@PropertySource("classpath:config.properties")
public class GlobalConfig {
public static String AAPL;
@Value("${AAPL}")
private void setDatabaseUrl(String value) {
AAPL = value;
}
}
您必须使用@Value从application.properties文件获取值
答案 3 :(得分:0)
实际上,您可以使用不带前缀的 @ConfigurationProperties
来获取 Spring 应用程序已知的整个属性,即应用程序、系统和环境属性等。
以下示例创建一个完全填充的地图作为 Spring bean。然后在任何需要的地方连接/注入这个 bean。
@Configuration
class YetAnotherConfiguration {
@ConfigurationProperties /* or @ConfigurationProperties("") */
@Bean
Map<String, String> allProperties() {
return new LinkedHashMap<>();
}
}
@Autowire
void test(Map<String, String> allProperties) {
System.out.println(allProperties.get("AAPL")); // 25
...
}