Как получить значения из yml на основе ввода? - PullRequest
3 голосов
/ 16 апреля 2020

Я использую spring-boot-starter-web последнюю версию 2.2.6. Мне нужно получить значение из файла YML на основе моего ввода вместо @value.

Если счет равен 100, необходимо получить следующие значения

key1: value1 100
key2: value2 100 

Если счет равен 1000, необходимо получить следующие значения

key1: value1 1000
key2: value2 1000

Как можно Я достигаю этого?

Мой файл application.yml,

config:
  host: http://myhost
  count-100:
      key1: value1 100
      key2: value2 100 
  count-1000:
      key1: value1 1000
      key2: value2 1000
  count-10000:
      key1: value1 10000
      key2: value2 10000

Java код,

int count = myObject.getCount();

if (count >= 100) {
  // this needs to fill from application.yml
  key1 = ""; 
  key2 = 0;
} else if (count >=1000 && count <= 10000) {
  key1 = "";
  key2 = 0;
} else {
  key1 = "";
  key2 = 0;
}

Любые замечания здесь высоко ценятся.

1 Ответ

2 голосов
/ 20 апреля 2020

Используйте @ConfigurationProperties для загрузки значений счетчика.

Я бы порекомендовал изменить yml вашего приложения, чтобы использовать счетчики в качестве ключа с последующими различными счетами.

Что-то вроде

config:
  host: http://myhost
  counts:
    100:
      key1: value1 100
      key2: value2 100
    1000:
      key1: value1 1000
      key2: value2 1000
    10000:
      key1: value1 10000
      key2: value2 10000

Создайте Counts класс

@Configuration
@ConfigurationProperties("config")
public class Counts {
    private final Map<Integer, Map<String, String>> counts;

    public Counts(Map<Integer, Map<String, String>> counts) {
        this.counts = counts;
    }

    public Map<Integer, Map<String, String>> getCounts() {
        return counts;
    }
}

Java Код

//Autowire Counts class

int count = myObject.getCount();

Map<Integer, Map<String, String>> countMap = counts.getCounts().get(count);
  key1 = countMap.get("key1");
  key2 = countMap.get("key2");
  if (count >= 100) {

  } ....

Если вы хотите сохранить yml своего приложения, вы можете использовать

@Configuration
@ConfigurationProperties("config")
public class Counts {

    private final Map<String, String> count100;

    private final Map<String, String> count1000;

    private final Map<String, String> count10000;

    public Counts(Map<String, String> count100, Map<String, String> count1000, Map<String, String> count10000) {
        this.count100 = count100;
        this.count1000 = count1000;
        this.count10000 = count10000;
    }

    public Map<String, String> getCount1000() {
        return count1000;
    }

    public Map<String, String> getCount100() {
        return count100;
    }

    public Map<String, String> getCount10000() {
        return count10000;
    }
}

Java код

    //Autowire Counts class

    int count = myObject.getCount();

    if (count >= 100) {
      Map<String, String> count100Map = counts.getCount100();
      key1 = count100Map.get("key1");
      key2 = count100Map.get("key2");;
    } ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...