Spring Boot读取属性而没有前缀到映射

时间:2018-09-10 04:54:45

标签: java spring spring-boot configurationproperties

我需要在地图中读取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;
    }
}

4 个答案:

答案 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
    ...
}