All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dswork.webio.EnvironmentUtil Maven / Gradle / Ivy

package dswork.webio;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.Properties;

/**
 * 读取系统properties配置文件,默认路径为:"/config/config.properties"
 */
public class EnvironmentUtil
{
	private static final String SYSTEM_PROPERTIES_PATH = "/config/config.properties";
	private static LinkedProperities SYSTEM_PROPERTIES;
	private static boolean isboot = false;
	private static String JarPath = null;

	private EnvironmentUtil()
	{}
	static
	{
		String p = EnvironmentUtil.class.getResource("/").getPath().replaceAll("\\\\", "/");
		if(p.startsWith("file:/") && p.endsWith(".jar!/BOOT-INF/classes!/"))
		{
			isboot = true;
			// fix Windows和Linux差异
			// Windows file:/C:/WorkServer
			// Linux   file:/WorkServer
			p = p.substring(5, p.length() - 20);// jar路径
			if(p.indexOf(":") == 2)
			{
				p = p.substring(1, p.lastIndexOf("/"));// Windows
			}
			else
			{
				p = p.substring(0, p.lastIndexOf("/"));// Linux
			}
			JarPath = p;
		}
		setSystemProperties(SYSTEM_PROPERTIES_PATH);
	}
	
	public static String getApplicationPath()
	{
		return JarPath;
	}
	
	private static boolean init(InputStream stream)
	{
		if(stream != null)
		{
			try
			{
				SYSTEM_PROPERTIES.load(stream);
				return true;
			}
			catch(Exception e)
			{
			}
			finally
			{
				try
				{
					stream.close();
				}
				catch(IOException ioe)
				{
				}
			}
		}
		return false;
	}
	
	public static void setSystemProperties(String path)
	{
		SYSTEM_PROPERTIES = new LinkedProperities();
		InputStream stream = null;
		try
		{
			// spring boot下先判断外部配置文件
			if(isboot)
			{
				stream = new FileInputStream(JarPath + path);
				// System.err.println("config.properties FileInputStream= " + JarPath + path);
				if(init(stream))
				{
					return;
				}
			}
			stream = EnvironmentUtil.class.getResourceAsStream(path);
			// System.err.println("config.properties getResourceAsStream= " + path);
			if(init(stream))
			{
				return;
			}
			System.out.println(SYSTEM_PROPERTIES_PATH + "无法加载");
		}
		catch(Error e)
		{
		}
		catch(Exception e)
		{
		}
	}

	/**
	 * 获得系统属性配置信息,如果没有则返回null
	 * @param name 属性名
	 * @return String
	 */
	public static final String getStringProperty(String... name)
	{
		String str = null;
		if(SYSTEM_PROPERTIES != null)
		{
			int len = name.length;
			for(int i = 0; i < len; i++)
			{
				if(name[i] != null)
				{
					str = SYSTEM_PROPERTIES.getProperty(name[i]);
					if(str != null)
					{
						break;
					}
				}
			}
		}
		return str == null ? null : String.valueOf(str).trim();
	}

	/**
	 * 转换值,如果没有则返回默认值(长整型)
	 * @param v 值
	 * @param defaultValue 默认值
	 * @return long
	 */
	private static final long _toLong(String v, long defaultValue)
	{
		try
		{
			return v == null ? defaultValue : Long.parseLong(v);
		}
		catch(Exception e)
		{}
		return defaultValue;
	}

	/**
	 * 转换值,如果没有则返回默认值(字符串类型)
	 * @param v 值
	 * @param defaultValue 默认值
	 * @return String
	 */
	private static final String _toString(String v, String defaultValue)
	{
		try
		{
			return v == null ? defaultValue : v;
		}
		catch(Exception e)
		{}
		return defaultValue;
	}

	/**
	 * 转换值,如果没有则返回默认值(布尔值"true"或"false")
	 * @param v 值
	 * @param defaultValue 默认值
	 * @return boolean
	 */
	private static final boolean _toBoolean(String v, boolean defaultValue)
	{
		boolean res = defaultValue;
		try
		{
			if(v != null)
			{
				if("true".equalsIgnoreCase(v))
				{
					res = Boolean.TRUE;
				}
				else if("false".equalsIgnoreCase(v))
				{
					res = Boolean.FALSE;
				}
			}
		}
		catch(Exception e)
		{}
		return res;
	}

	/**
	 * 获得系统属性配置信息,如果没有则返回默认值(长整型)
	 * @param name1 属性名
	 * @param name2 备用属性名
	 * @param defaultValue 默认值
	 * @return long
	 */
	public static final long getToLong(String name1, String name2, long defaultValue)
	{
		return _toLong(getStringProperty(name1, name2), defaultValue);
	}

	/**
	 * 获得系统属性配置信息,如果没有则返回默认值(长整型)
	 * @param name 属性名
	 * @param defaultValue 默认值
	 * @return long
	 */
	public static final long getToLong(String name, long defaultValue)
	{
		return _toLong(getStringProperty(name), defaultValue);
	}

	/**
	 * 获得系统属性配置信息,如果没有则返回默认值(字符串类型)
	 * @param name1 属性名
	 * @param name2 备用属性名
	 * @param defaultValue 默认值
	 * @return String
	 */
	public static final String getToString(String name1, String name2, String defaultValue)
	{
		return _toString(getStringProperty(name1, name2), defaultValue);
	}

	/**
	 * 获得系统属性配置信息,如果没有则返回默认值(字符串类型)
	 * @param name 属性名
	 * @param defaultValue 默认值
	 * @return String
	 */
	public static final String getToString(String name, String defaultValue)
	{
		return _toString(getStringProperty(name), defaultValue);
	}

	/**
	 * 获得系统属性配置信息,如果没有则返回默认值(布尔值"true"或"false")
	 * @param name1 属性名
	 * @param name2 备用属性名
	 * @param defaultValue 默认值
	 * @return boolean
	 */
	public static final boolean getToBoolean(String name1, String name2, boolean defaultValue)
	{
		return _toBoolean(getStringProperty(name1, name2), defaultValue);
	}

	/**
	 * 获得系统属性配置信息,如果没有则返回默认值(布尔值"true"或"false")
	 * @param name 属性名
	 * @param defaultValue 默认值
	 * @return boolean
	 */
	public static final boolean getToBoolean(String name, boolean defaultValue)
	{
		return _toBoolean(getStringProperty(name), defaultValue);
	}

	/**
	 * 获得配置文件里的所有的键值对
	 * @return LinkedProperities
	 */
	public static final LinkedProperities getSystemProperties()
	{
		return SYSTEM_PROPERTIES;
	}

	public static class LinkedProperities extends Properties
	{
		private static final long serialVersionUID = 1L;
		private LinkedList linkedList = new LinkedList();

		@Override
		public synchronized Object put(Object key, Object value)
		{
			linkedList.add((String) key);
			return super.put(key, value);
		}

		public LinkedList getAllKeysToOrder()
		{
			return linkedList;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy