【问题标题】:Populating values for pojo according to environment variables in spring在spring中根据环境变量填充pojo的值
【发布时间】:2021-03-19 06:03:50
【问题描述】:

我有一个类,我在其中映射应用程序文件中定义的属性。但是,如果定义了启用之类的环境变量,我想将两个字段设置为其他环境变量中定义的默认值。我怎样才能做到这一点。提前感谢您的帮助。

这是我的课:

@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;|

    }

}

这是我的 application.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 变量值。

【问题讨论】:

  • 为什么不使用 env 特定的应用程序文件来覆盖默认应用程序文件中的值?
  • 你能举个例子吗
  • 你的应用文件是什么样子的?

标签: java spring spring-boot


【解决方案1】:

您可以在这种情况下使用Environment bean,这样您就可以在您的类中注入具有此逻辑的bean

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 变量的文字值,如果您也想使用属性中的 floor 和 class 值,那么您可以在循环中连接它而不是 floor/class em>

逻辑功能只是给你一个想法,你可以使用你的逻辑

【讨论】:

  • 环境变量类似于 {rollNo}_floor 所以我必须根据应用程序属性文件中的滚动编号来获取它。
  • 我没听明白,你的用例中的环境是什么? roll 不是环境还是价值?请在您的问题中添加更多信息。
  • 其实 floor & class 可能有不同的环境变量。所以每个都会附加一个卷号。例如,它将是 rollNo11_floor、rollNo12_floor 等等。我需要根据应用程序属性文件中给出的 rollNo 来获取 env 变量。
  • 我仍然没有得到您想要做的事情,请用示例和用例说明更新您的问题。
  • 已编辑问题,如果需要更多详细信息,请告诉我。
猜你喜欢
  • 2012-12-17
  • 1970-01-01
  • 2020-06-17
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多