Spring Boot читает свойства без префикса к карте - PullRequest
0 голосов
/ 10 сентября 2018

Мне нужно прочитать все свойства в файле application.properties на карте. В приведенном ниже коде свойство test имеет соответствующее значение, но карта пуста. Как заполнить «карту» значениями в файле 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 голосов
/ 10 сентября 2018

Этого можно добиться с помощью 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;
    }
}
0 голосов
/ 10 сентября 2018
@PropertySource("classpath:config.properties")
public class GlobalConfig {

  public static String AAPL;
  @Value("${AAPL}")
  private void setDatabaseUrl(String value) {
    AAPL = value;
  }
}

Вы должны использовать @Value, чтобы получить значение из файла application.properties

0 голосов
/ 10 сентября 2018

Насколько я знаю, вы не можете сделать это с @ConfigurationProperties, для загрузки этих свойств внутри компонента требуется префикс.

Однако, если ваша цель - получить «значение Y» для «свойства X» программным способом, вы всегда можете ввести Environment и использовать метод getProperty(), чтобы найти определенное свойство, например:

@Configuration
public class InitialConfiguration {
    @Autowired
    private Environment environment;

    @PostConstruct
    public void test() {
        Integer aapl = environment.getProperty("AAPL", Integer.class); // 25
        Integer gddy = environment.getProperty("GDDY", Integer.class); // 65
        Integer test = environment.getProperty("test", Integer.class); // 22
    }
}
0 голосов
/ 10 сентября 2018

При весенней загрузке, если вам нужно получить одно значение из application.proprties, вам просто нужно использовать аннотацию @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));
      }
}
...