Заполнение значений pojo в соответствии с переменными среды весной

#java #spring #spring-boot

Вопрос:

У меня есть класс, в котором я сопоставляю свойства, определенные в файле приложения. Однако, если определена переменная среды, подобная enabled, я хочу установить для двух полей значение по умолчанию, определенное в других переменных среды. Как я могу это сделать? Заранее спасибо за вашу помощь.

Вот мой класс:

 @ConfigurationProperties(prefix = "school.students")
@Data
public class SchoolStudents {

    private List<Details> details;

    @Data
    public static class Details {
        private String name;
        private String class;
        private String floor;
        private int rollNo;|

    }

}
 

Вот мое заявление.yaml:

 school:
  student:
    details:
    - name: Aaraon
      class: Sixth
      floor: First
      rollNo: 70
    - name: Lisa
      class: Third
      floor: Second
      rollNo: 102
 

Поэтому в приведенном выше случае, если для переменной среды включено значение true, я хочу выбрать класс и этаж из переменных среды, уже присутствующих в системе. Переменные среды будут 102_floor,102_class,70_floor,70_class. Поэтому для Lisa необходимо заполнить значения переменных 102_class и 102_floor.

Комментарии:

1. Почему вы не используете файл приложения env для переопределения значений в файле приложения по умолчанию?

2. можете ли вы привести мне пример этого

3. Как выглядит ваш файл заявки?

Ответ №1:

Вы можете использовать Environment боб для этого случая, поэтому вы можете ввести боб в свой класс, который будет иметь такую логику

 public class SomeServiceOrLogicClass {
     @Autowired
     private Environment env;
     
     @Autowired
     private SchoolStudents students;

     public void someLogicFunction() {
          schoolStudents.forEach(student -> {
             for(Detail d : student.getDetails()) {
                System.out.println(env.getProperty(d.getRollNo()   "_floor"));
           // Similar for class thing     
             }
          })
          
     }
}
 

Обратите внимание, что я использовал буквальное значение переменной env, как вы вставили в свой вопрос, если вы также хотите использовать значение этажа и класса из свойств, то вы можете просто объединить это вместо пола/класса в цикле

Функция логики состоит в том, чтобы просто дать вам представление, вы можете использовать свою логику

Комментарии:

1. Переменная окружения будет чем-то вроде {rollNo}_floor, поэтому я должен извлечь ее на основе значения » нет » в файле свойств приложения.

2. Я вас не понял, что такое env в вашем случае использования? является ли roll не средой или это ценность? Пожалуйста, добавьте больше информации к вашему вопросу.

3. На самом деле для пола и класса могут быть разные переменные среды. Таким образом, к каждому из них будет приложен номер броска. Например, это будет rollNo11_floor, rollNo12_floor и так далее. Мне нужно извлечь переменную env на основе rollNo, указанного в файле свойств приложения.

4. Я все еще не понимаю, что вы пытаетесь сделать, пожалуйста, обновите свой вопрос примерами и объяснением варианта использования.

5. Отредактировал вопрос,дайте мне знать, если потребуется более подробная информация.