public static final String STUDENTS = "studentsInfo";
@Bean(name = "students")
public List<Student> getStudents() {
String configuredStudents = env.getProperty("studentsInfo"); //JSON having list of students info
List<Student> students;
if (configuredStudents != null) {
try {
students =
Arrays.asList(
JsonUtilFactory.getInstance(JsonUtilFactory.JsonUtilType.LOCAL)
.toObject(configuredStudents, Student[].class));
} catch (Exception e) {
}
}
return students;
}
- 我能够刷新 env 变量 [即无需系统重启
@RefreshScope
和spring-cloud-starter-kubernetes-config
]。如何对 bean 学生进行这些更改? - 此外,如果我必须部分更新 JSON [比如添加一个新学生],什么是正确的方法?
最佳答案
虽然我不确定为什么要为所有学生创建 bean,但以下是我的建议。
DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache
How to reinitialize a Spring Bean?
更好的方法是将它们存储在 noSql 数据库中并返回列表,或者如果您想从文件中读取,则覆盖 DataSource 以从文件中读取。
关于java - 反射(reflect) env 变量重新加载到 java bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69293742/