Spring加载自定义配置文件内容

一:bean的XML配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="restfulBean" class="com.hyxt.restful.registry.RestfulBean" init-method="start">
        <property name="zkClient" ref="zkClient"/>
        <property name="root" value="restfulCommand"/>
        <property name="businessMap">
            <map>
                <!--<entry key="cashCommand" value="http://{server}:8082/posRequest/forPosApi/posMutual"/>
             <entry key="cashCommand1" value="http://{server}:8080/demoPrj/rest/demo1"/>
              <entry key="cashCommand2" value="http://{server}:8080/demoPrj/rest/demo2"/>-->
            </map>
        </property>
    </bean>
    <!-- 引入zookeeper client bean -->
    <import resource="zookeeper.xml"/>
</beans>

二:Bean实现类如下:

public class RestfulBean implements Restful {

    private Logger logger = LoggerFactory.getLogger(RestfulBean.class);

    private String root;
    private Map<String,String> businessMap;
    protected ZkClient zkClient;

    public String getRoot() {
        return root;
    }

    public void setRoot(String root) {
        this.root = root;
    }

    public Map<String, String> getBusinessMap() {
        return businessMap;
    }

    public void setBusinessMap(Map<String, String> businessMap) {
        this.businessMap = businessMap;
    }

    public ZkClient getZkClient() {
        return zkClient;
    }

    public void setZkClient(ZkClient zkClient) {
        this.zkClient = zkClient;
    }

    public void start() {
        if(root==null||"".equals(root)){
            throw new RuntimeException("没有定义根节点");
        }
        if(businessMap==null){
            throw new RuntimeException("没有定义restful服务");
        }

        try {
            for (String businessKey : businessMap.keySet()){
                String url = businessMap.get(businessKey);
                url = url.replace("{server}", NetUtils.getLocalHost());
                url = URLEncoder.encode(url, "UTF-8");
                String path = ZKPaths.makePath(root, businessKey, url);
                //不管有没有,先删除掉再开始发布
                try{
                    zkClient.deletePath(path);
                }catch (Exception e){
                    ;
                }
                zkClient.createPath(path, CreateMode.EPHEMERAL);
                logger.info("发布reftful服务[{}]: {} 成功",businessKey,url);
            }
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage(),e);
        }
    }

    @Override
    public List<String> getRestUrls(String businessKey) {
        try{
            List<String> children = zkClient.getChildren(ZKPaths.makePath(root, businessKey));
            return Lists.transform(children, new Function<String, String>() {
                @Override
                public String apply(String s) {
                    try {
                        return URLDecoder.decode(s, "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        throw new RuntimeException(e.getMessage(), e);
                    }
                }
            });
        }catch (Exception e){
            logger.error(e.getMessage(),e);
            return null;
        }
    }

    @Override
    public String getRestUrl(String businessKey) {
        try{
            List<String> restUrls = getRestUrls(businessKey);
            if (restUrls != null&&restUrls.size()>0) {
                return restUrls.get(new Random().nextInt(restUrls.size()));
            }
        }catch (Exception e){
            logger.error(e.getMessage(),e);
        }
        return null;
    }

    @Override
    public void listener(final String businessKey, final RestfulListener listener) {
        try{
            zkClient.pathListener(ZKPaths.makePath(root, businessKey), new PathChildrenCacheListener() {
                @Override
                public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
                    listener.childChange(businessKey);
                }
            });
        }catch (Exception e){
            logger.error(e.getMessage(),e);
        }
    }

}

三:初始化时加载配置文件,如test.xml

猜你喜欢

转载自xiaowei2002.iteye.com/blog/2236862
今日推荐