我正在进行维护项目,并且因内存泄漏而引发问题
基本上,代码是从数据库加载应用程序上下文中的数据值。如果更改了DB中的值,则此功能还用于更新应用程序上下文中的值,而无需重新启动服务器。
使用@Value注释注释的变量会在项目中的每个位置更新,例如:
players
生产报告内存泄漏的方法是updateObjects():
@Value("${cost}")
private String cost;
是否因为使用了反射和&能反射用弹簧解决问题吗?
CustomBeanPostProcessor.java
public class DbPropertySourcesPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
private CustomBeanPostProcessor customBeanPostProcessor;
private static Properties dbProps = new Properties();
private void updateObjects() {
for (String key : customBeanPostProcessor.getObjectMap().keySet()) {
if (null != dbProps.get(key)) {
List<Object> objectList = customBeanPostProcessor.getObjectMap().get(key);
if (objectList != null && objectList.size() > 0) {
for (Object object : objectList) {
if (null != object) {
for (Field field : object.getClass().getDeclaredFields()) {
Value value = field.getAnnotation(Value.class);
if (null != value && null != value.value()
&& value.value().replace("${", "").replace("}", "").length() > 0
&& value.value().replace("${", "").replace("}", "").equalsIgnoreCase(key)
&& field.getType() == String.class) {
field.setAccessible(true);
try {
field.set(object, dbProps.get(key));
}
catch (IllegalAccessException ee) {
logger.error("Unable to update Object",ee);
}
}
}
}
}
}
}
}
}
如果需要更多信息,请与我们联系 谢谢。