现在的位置: 首页 > 综合 > 正文

使用java XMLDecoder实现应用程序的动态配置

2018年04月14日 ⁄ 综合 ⁄ 共 6008字 ⁄ 字号 评论关闭

1、一个使用Properties的配置示例:

配置类:

public class ThreadPoolConfiguration implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -4963792647106252083L;
	// --------------------------------------------------------------- Constants
	public static final String PROPERTY_CORE_POOLSIZE = "corePoolSize";
	public static final String PROPERTY_MAX_POOLSIZE = "maximumPoolSize";
	public static final String PROPERTY_KEEPALIVE = "keepAliveTime";

    // ------------------------------------------------------------ Protected data
    protected Properties configurationProperties = new Properties();

    // ------------------------------------------------------------ Constructors

    public ThreadPoolConfiguration() {
    }

    public ThreadPoolConfiguration(Properties prop) {
        this.configurationProperties = prop;
    }
    // ---------------------------------------------------------- Public methods
    /**
     * Returns the properties to use configuring a DataSource
     * @return the properties to use configuring a DataSource
     */
    public Properties getProperties() {
        return (Properties) configurationProperties.clone();
    }

    /**
     * Returns the property with the given name
     * @param key the property name
     * @return the property value or null if not found
     */
    public String getProperty(String key) {
        return configurationProperties.getProperty(key);
    }

    /**
     * Sets a property
     * @param key the property name
     * @param value the property value
     */
    public void setProperty(String key, String value) {
        configurationProperties.setProperty(key, value);
    }

    /**
     * Returns an enumeration of all the properties in this configuration
     * @return an enumeration of all the keys in this property list
     */
    public Enumeration propertyNames() {
        return configurationProperties.propertyNames();
    }

    /**
     * Clears this configuration so that it contains no keys.
     */
    public void clear() {
        configurationProperties.clear();
    }

    @Override
    public ThreadPoolConfiguration clone() {
        if (configurationProperties == null) {
            return null;
        }
        return new ThreadPoolConfiguration((Properties) configurationProperties.clone());
    }

    @Override
    public boolean equals(Object o) {
        return configurationProperties.equals(o);
    }

    @Override
    public int hashCode() {
        return configurationProperties.hashCode();
    }
}//end class ThreadPoolConfiguration

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0" class="java.beans.XMLDecoder">
 <object class="com.nearme.find.myphone.config.ThreadPoolConfiguration">  
    <!-- 线程池维护线程的最少数量 -->
    <void method="setProperty">
     <string>corePoolSize</string>
     <string>8</string>
    </void>
     <!-- 线程池维护线程的最大数量 -->
    <void method="setProperty">
     <string>maximumPoolSize</string>
     <string>20</string>
    </void>
     <!-- 线程池维护线程所允许的空闲时间(以秒为单位)-->
    <void method="setProperty">
     <string>keepAliveTime</string>
     <string>60</string>
    </void>
 </object>
</java>

2、使用string、int基本类型的配置示例:

配置类:

public class LoginConfiguration implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4634263968118788391L;

	public String getUsercenter() {
		return usercenter;
	}

	public void setUsercenter(String usercenter) {
		this.usercenter = usercenter;
	}

	public String getDomain() {
		return domain;
	}

	public void setDomain(String domain) {
		this.domain = domain;
	}

	public String getLocalUrl() {
		return localUrl;
	}

	public void setLocalUrl(String localUrl) {
		this.localUrl = localUrl;
	}

	public int getTimeout() {
		return timeout;
	}

	public void setTimeout(int timeout) {
		this.timeout = timeout;
	}

	public int getInterval() {
		return interval;
	}

	public void setInterval(int interval) {
		this.interval = interval;
	}

	public MemcacheClient getUcMemcachedManager() {
		return ucMemcachedManager;
	}

	public void setUcMemcachedManager(MemcacheClient ucMemcachedManager) {
		this.ucMemcachedManager = ucMemcachedManager;
	}

	protected String usercenter = null;
	    
	protected String domain = null;
	    
	protected String localUrl = null;
	    
	protected int timeout = 30 * 60 * 1000;//过期时间默认是15分钟
	    
	protected int interval = 2 * 60 * 1000;//两分钟更新一次memcached会话
	
	private MemcacheClient ucMemcachedManager = null;
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0" class="java.beans.XMLDecoder">
	<object class="com.nearme.commons.tools.cache.config.LoginConfiguration">
		<!-- 会话过期访问的登陆地址 -->
		<void property="usercenter">
			<string>http://uc.dev.ocloud.com:9091/</string>
		</void>
		<!-- cookie共享域名 -->
		<void property="domain">
			<string>.local.ocloud.com</string>
		</void>
		<!-- 登陆成功跳转的地址 -->
		<void property="localUrl">
			<string>http://sync.dev.ocloud.com:9093/main.vm</string>
		</void>
		<!-- 用户信息存储的memcached配置 -->
		<void property="ucMemcachedManager">
			<object class="com.nearme.commons.tools.cache.DangaMemcacheClientImpl">
				<void property="hosts">
					<array class="java.lang.String" length="1">
						<void index="0">
							<string>127.0.0.1:11211</string>
						</void>
					</array>
				</void>
				<void property="weights">
					<array class="java.lang.Integer" length="1">
						<void index="0">
							<int>5</int>
						</void>
					</array>
				</void>
			</object>
		</void>
		<!-- 会话过期时间 -->
		<void property="timeout">
			<int>900000</int>
		</void>
		<!-- 会话过期更新间隔 -->
		<void property="interval">
			<int>12000</int>
		</void>
	</object>
</java>

3、使用数组的配置示例:

配置类:

public class ServerConfiguration implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	//头部连接配置
	private String []links = null;
	public String[] getLinks() {
		return links;
	}
	public void setLinks(String[] links) {
		this.links = links;
	}
}//end class ServerConfiguration

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0" class="java.beans.XMLDecoder">
	<object class="com.nearme.find.myphone.config.ServerConfiguration">
		<!-- 头部链接配置 -->
		<void property="links">
			<array class="java.lang.String" length="3">
				<void index="0">
					<string>http://www.nearme.com.cn</string>
				</void>
				<void index="1">
					<string>http://appstore1.wanyol.com:888</string>
				</void>
				<void index="2">
					<string>http://sync1.wanyol.com:8080</string>
				</void>
			</array>
		</void>
	</object>
</java>

4、使用队列的配置示例:

配置类:

public class ServerConfiguration {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	//默认群组配置
	private ArrayList<String> defaultGroups = null;
	public ArrayList<String> getDefaultGroups() {
		return defaultGroups;
	}
	public void setDefaultGroups(ArrayList<String> defaultGroups) {
		this.defaultGroups = defaultGroups;
	}
}//end class ServerConfiguration

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0" class="java.beans.XMLDecoder">
	<object class="com.nearme.sync.config.ServerConfiguration">
		<void property="defaultGroups">
			<object class="java.util.ArrayList">
				<void method="add">
					<string>家人</string>
				</void>
				<void method="add">
					<string>同事</string>
				</void>
				<void method="add">
					<string>朋友</string>
				</void>
				<void method="add">
					<string>重要人士</string>
				</void>
			</object>
		</void>
	</object>
</java>

【上篇】
【下篇】

抱歉!评论已关闭.