java.util.Properties工具类

本文介绍了一个Java工具类,用于简化Properties文件的操作,并扩展了对List和Map数据格式的支持。提供了单个属性、多个属性以及复杂数据类型的读写方法。

原文地址:http://www.oschina.net/code/snippet_1423264_36214

* java.util.Properties工具类
 *     1、封装了对属性文件的简单读写
 *     2、拓展加入了对List、Map数据格式的支持
 * 具体包括四部分:单属性读写、多属性读写、List支持、Map支持
 * 
 * 注意:
 *     1、由于在属性值读取过程中,字符分割是采用“特殊字符+向后断言”的方式
 *       所以被分割的key/value结束不允许以“\”作为结尾,当前逻辑是replace掉后缀的“\”符号

其他:
在android中,考虑可用的存储方式有:SharedPreference、Sqlite,今后还可以再考虑Properties类,当然还有其他的如:一般file、序列化文件等

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
 * java.util.Properties工具类
 * 		1、封装了对属性文件的简单读写
 * 		2、拓展加入了对List、Map数据格式的支持
 * 
 * 注意:
 * 		1、由于在属性值读取过程中,字符分割是采用“特殊字符+向后断言”的方式
 * 			所以被分割的key/value结束不允许以“\”作为结尾,当前逻辑是replace掉后缀的“\”符号
 * 
 * 
 * 
 * @author lanfog
 * 		2014年05月29日 16时41分23秒
 *
 */
public class PropertiesUtil {
	
	/*
	 * 单属性读写
	 */
	
	public static boolean setProperty(String filePath, String fileName, String propertyName, String propertyValue){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			p.setProperty(propertyName, propertyValue);
			String comment = "Update '" + propertyName + "' value";
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	public static boolean clearProperty(String filePath, String fileName, String propertyName){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			p.setProperty(propertyName, "");
			String comment = propertyName;
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	public static boolean removeProperty(String filePath, String fileName, String propertyName){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			p.remove(propertyName);
			String comment = propertyName;
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	public static String getProperty(String filePath, String fileName, String propertyName){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			return p.getProperty(propertyName);
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	public static String getProperty(String filePath, String fileName, String propertyName, String defaultValue){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			return p.getProperty(propertyName, defaultValue);
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	/*
	 * 多属性读写
	 */

	public static boolean setProperty(String filePath, String fileName, Map<String, String> propertyMap){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			for(String name:propertyMap.keySet()){
				p.setProperty(name, propertyMap.get(name));
			}
			String comment = "Update '" + propertyMap.keySet().toString() + "' value";
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 这么随便的代码,却是极好的!
	 * 
	 * @param filePath
	 * @param fileName
	 * @param propertyArray
	 * @return
	 */
	public static boolean setProperty(String filePath, String fileName, String... propertyArray){
		if(propertyArray == null || propertyArray.length%2 != 0){
			throw new IllegalArgumentException("make sure 'propertyArray' argument is 'ket/value' pairs");
		}
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			for(int i=0;i<propertyArray.length/2;i++){
				p.setProperty(propertyArray[i*2], propertyArray[i*2+1]);
			}
			String comment =  "Update '" + propertyArray[0] + "..." + "' value";
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 方法返回布尔值,为true时表示成功
	 * 	详细数据见传入参数propertyMap(此处采用传引用的方式)
	 * 
	 * @param filePath
	 * @param fileName
	 * @param propertyMap
	 * @return
	 */
	public static boolean getProperty(String filePath, String fileName, Map<String, String> propertyMap){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			for(String name:propertyMap.keySet()){
				propertyMap.put(name, p.getProperty(name, propertyMap.get(name)));
			}
			return true;
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	/*
	 * List属性值读写
	 */
	
	public static boolean setProperty(String filePath, String fileName, String propertyName, List<String> propertyValueList){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			StringBuilder propertyValue = new StringBuilder();
			if(propertyValueList != null && propertyValueList.size() > 0){
				for(String value:propertyValueList){
					propertyValue.append(
							value.replaceAll("(\\\\)+$", "").replaceAll("\\\\", "\\\\\\\\").replaceAll(";", "\\\\;") +
							";");
				}
			}
			p.setProperty(propertyName, propertyValue.toString());
			String comment = "Update '" + propertyName + "' value";
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	public static boolean appendProperty(String filePath, String fileName, String propertyName, List<String> propertyValueList){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			StringBuilder propertyValue = new StringBuilder();
			for(String value:propertyValueList){
				propertyValue.append(
						value.replaceAll("(\\\\)+$", "").replaceAll("\\\\", "\\\\\\\\").replaceAll(";", "\\\\;") +
						";");
			}
			p.setProperty(propertyName, p.getProperty(propertyName) + propertyValue.substring(1));
			String comment = "Update '" + propertyName + "' value";
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	public static boolean appendProperty(String filePath, String fileName, String propertyName, String propertyValue){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			p.setProperty(propertyName, p.getProperty(propertyName, "") +
					propertyValue.replaceAll("(\\\\)+$", "").replaceAll("\\\\", "\\\\\\\\").replaceAll(";", "\\\\;") +
					";");
			String comment = "Update '" + propertyName + "' value";
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	public static List<String> getPropertyList(String filePath, String fileName, String propertyName, String defaultValue){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			String v = p.getProperty(propertyName, defaultValue);
			String[] iA = v.split("(?<!\\\\);");
			for(int i=0;i<iA.length;i++){
				iA[i] = iA[i].replaceAll("(\\\\)+$", "").replaceAll("\\\\;", ";").replaceAll("\\\\\\\\", "\\\\");
			}
			return Arrays.asList(iA);
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	/*
	 * MAP属性值读写
	 */
	
	public static boolean setProperty(String filePath, String fileName, String propertyName, Map<String, String> propertyValueMap){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			StringBuilder propertyValue = new StringBuilder();
			if(propertyValueMap != null && propertyValueMap.size() > 0){
				for(String key:propertyValueMap.keySet()){
					propertyValue.append(
							key.replaceAll("\\\\", "\\\\\\\\").replaceAll("(\\\\)+$", "").replaceAll("\\,", "\\\\,").replaceAll(";", "\\\\;") + 
							"," +
							propertyValueMap.get(key).replaceAll("(\\\\)+$", "").replaceAll("\\\\", "\\\\\\\\").replaceAll("\\,", "\\\\,").replaceAll(";", "\\\\;") +
							";");
				}
			}
			p.setProperty(propertyName, propertyValue.toString());
			String comment = "Update '" + propertyName + "' value";
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	public static boolean appendProperty(String filePath, String fileName, String propertyName, Map<String, String> propertyValueMap){
		try{
			Map<String, String> combinePropertyValueMap = getPropertyMap(filePath, fileName, propertyName, "");
			combinePropertyValueMap.putAll(propertyValueMap);
			return setProperty(filePath, fileName, propertyName, combinePropertyValueMap);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	public static boolean appendProperty(String filePath, String fileName, String propertyName, String propertyKey, String propertyValue){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			p.setProperty(propertyName, p.getProperty(propertyName, "") +
					propertyKey.replaceAll("(\\\\)+$", "").replaceAll("\\\\", "\\\\\\\\").replaceAll("\\,", "\\\\,").replaceAll(";", "\\\\;") + 
					"," +
					propertyValue.replaceAll("(\\\\)+$", "").replaceAll("\\\\", "\\\\\\\\").replaceAll("\\,", "\\\\,").replaceAll(";", "\\\\;") +
					";");
			String comment = "Update '" + propertyName + "." + propertyKey + "' value";
			return storePropertyInstance(filePath, fileName, p, comment);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 返回Map格式封装的属性值
	 * 	其中,Map以HashMap创建,若要求排序的话,推荐外部排序
	 * 
	 * @param filePath
	 * @param fileName
	 * @param propertyName
	 * @param defaultValue
	 * @return
	 */
	public static Map<String, String> getPropertyMap(String filePath, String fileName, String propertyName, String defaultValue){
		try{
			Properties p = loadPropertyInstance(filePath, fileName);
			String v = p.getProperty(propertyName, defaultValue);
			
			Map<String, String> retMap = new HashMap<String, String>();
			String[] iA = v.split("(?<!\\\\);");
			for(String i:iA){
				String[] jA = i.split("(?<!\\\\),");
				if(jA.length == 2){
					retMap.put(
							jA[0].replaceAll("(\\\\)+$", "").replaceAll("\\\\\\,", "\\,").replaceAll("\\\\;", ";").replaceAll("\\\\\\\\", "\\\\"), 
							jA[1].replaceAll("(\\\\)+$", "").replaceAll("\\\\\\,", "\\,").replaceAll("\\\\;", ";").replaceAll("\\\\\\\\", "\\\\"));
				}
			}
			return retMap;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	/*
	 * 基本
	 */

	public static Properties loadPropertyInstance(String filePath, String fileName){
		try{
			File d = new File(filePath);
			if(!d.exists()){
				d.mkdirs();
			}
			File f = new File(d, fileName);
			if(!f.exists()){
				f.createNewFile();
			}
			Properties p = new Properties();
			InputStream is = new FileInputStream(f);
			p.load(is);
			is.close();
			return p;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	public static boolean storePropertyInstance(String filePath, String fileName, Properties p, String comment){
		try{
			File d = new File(filePath);
			if(!d.exists()){
				d.mkdirs();
			}
			File f = new File(d, fileName);
			if(!f.exists()){
				f.createNewFile();
			}
			OutputStream os = new FileOutputStream(f);
			p.store(os, comment);
			os.close();
			return true;
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	
}



2025-07-11 10:29:00.047 [XNIO-2 task-3] [9777be96c6f84c8d8a89a3006e40c78d] WARN - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - [logException,208] - Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"]->java.util.Properties["epgroup"]->dm.jdbc.internal.conf.EPGroup["props"]->dm.jdbc.internal.conf.DmProperties["properties"])] 什么问题,接口正常返回了确报错
最新发布
07-12
<think>首先,用户的问题是:"什么问题,接口正常返回了确报错"。这似乎是一个错误日志,描述了Spring框架中的一个异常:`org.springframework.http.converter.HttpMessageNotWritableException`,原因是JSON序列化时出现无限递归(`Infinite recursion (StackOverflowError)`)。 用户的问题是询问这个错误是什么问题,尽管接口正常返回了,但还是报错了。但日志显示接口并没有正常返回,而是抛出了异常。 关键点是:异常是`HttpMessageNotWritableException`,嵌套异常是`JsonMappingException: Infinite recursion (StackOverflowError)`。这意味着在将对象序列化为JSON时,发生了无限递归,导致堆栈溢出。 错误链显示了一个循环引用:`DmProperties["properties"]->java.util.Properties["epgroup"]->EPGroup["props"]->DmProperties["properties"]`,这个循环不断重复,导致无限递归。 所以,问题在于数据模型中有循环引用,Jackson在序列化时无法处理它,从而抛出异常。 现在,我需要用中文回答这个问题。回答应该解释问题原因和解决方案。 回答结构: 1. 解释错误原因:无限递归由于循环引用。 2. 提供解决方案:如何避免循环引用,比如使用Jackson的注解如`@JsonIgnore`或`@JsonManagedReference`和`@JsonBackReference`。 3. 给出示例代码或建议。 最后,根据用户的问题和我的回答,提出3-5个相关问题。问题必须以"§§相关问题§§"开头,且在同一行输出。 相关问题应与主题相关: - 如何解决JSON序列化中的循环引用? - Jackson注解的使用示例。 - 其他常见Jackson异常。 - 如何调试无限递归问题? 确保回答完整,然后输出相关问题。 完整回答: - 问题诊断:循环引用导致无限递归。 - 解决方案:使用Jackson注解来打破循环。 - 示例:简要说明注解用法。 相关问题: 1. 如何在Jackson中处理循环引用? 2. 什么是`@JsonIgnore`和`@JsonManagedReference`的区别? 3. 如何调试Spring Boot中的JSON序列化错误? 4. 其他常见原因导致`HttpMessageNotWritableException`? 5. 如何配置Jackson来忽略循环引用? 输出格式: - 回答后,直接输出"§§相关问题§§",然后列出问题,用数字编号。</think>根据您提供的错误日志,问题在于接口在返回JSON响应时发生了**无限递归(Infinite recursion)**,导致`StackOverflowError`。具体原因是数据模型中存在循环引用(例如`DmProperties`和`EPGroup`对象相互引用),当Spring Boot使用Jackson库序列化对象为JSON时,这种循环引用会触发无限递归,最终抛出`HttpMessageNotWritableException`。尽管接口可能处理了业务逻辑,但序列化阶段失败,因此报错。 ### 问题原因和解决方案: - **原因**:数据对象(如`DmProperties`和`EPGroup`)之间存在双向引用,Jackson在序列化时无法终止递归。 - **解决方案**: 1. **使用Jackson注解打破循环**:在Java实体类中添加注解,例如: - `@JsonIgnore`:忽略某个字段的序列化。 - `@JsonManagedReference` 和 `@JsonBackReference`:用于处理父子关系(示例代码见下)。 2. **配置Jackson忽略循环引用**:在Spring Boot中,通过`application.properties`添加`spring.jackson.serialization.fail-on-empty-beans=false`和`spring.jackson.serialization.write-self-references-as-null=true`。 3. **重构数据模型**:避免双向引用,使用DTO(Data Transfer Object)来扁平化数据结构。 示例代码(使用注解): ```java public class DmProperties { @JsonManagedReference private Properties properties; // 其他字段... } public class EPGroup { @JsonBackReference private DmProperties props; // 其他字段... } ``` ### 预防措施: - 在开发阶段,使用调试工具检查对象引用图。 - 在序列化前,使用`ObjectMapper`的`disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)`配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值