zoukankan      html  css  js  c++  java
  • HttpSolrServer-采用静态工厂方法,创建HttpSolrServer单实例

      HttpSolrServer线程安全,如果使用下面构造器,必须对所有的请求重用相同的实例.如果实例在运行中创建的,
    它可能会导致连接泄漏.推荐的做法就是保持每个solr服务url的HttpSolrServer的静态实例,所有的请求都共享这个实例.
    参考https://issues.apache.org/jira/browse/SOLR-861查看更多细节.
    1.创建配置文件solr-config.properties:

    cores=ac,jd
    
    base_url=http://127.0.0.a:13131/solr
    
    

     2.创建配置对象ConfigUtil.java 读取properties文件中的配置:

    package com.li.util;
    
    import java.util.ResourceBundle;
    
    
    public class ConfigUtil {
        private static ResourceBundle  resouceBundle = ResourceBundle.getBundle(Config.SEARCH);
        public static String getString(String key){
            return resouceBundle.getString(key);
        }
    }

    3.配置属性对象类Config.java:

    package com.li.util;
    
    public class Config {
        
        //common
        public static final String COMMA = ",";
        public static final String UNDERLINE = "_";
        public static final String SINGE_BLANK =" ";
        public static final String SLASH ="/";
        public static final String COLON =":";
            
        
        public static final String BASE_URL = "base_url";
        public static final String CORES = "cores";
        
        
        //配置文件
        public static final String SEARCH = "solr-config";
        
    }

    4.静态工厂方法SolrServerFactory.java:

    package com.li.solrj;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.solr.client.solrj.impl.HttpSolrServer;
    
    import com.li.util.Config;
    import com.li.util.ConfigUtil;
    
    /**
     * 创建一个HttpSolrServer的静态工厂方法,
     * 用于创建多个集合的单例模式
     * @author Administrator
     *
     */
    public class SolrServerFactory {
        
        public static Map<String,HttpSolrServer> servers ;
        
        static {
            servers = new HashMap<String,HttpSolrServer>();
            //静态加载所有的solrServer
            String[] cores = ConfigUtil.getString(Config.CORES).split(Config.COMMA);
            String base_url = ConfigUtil.getString(Config.BASE_URL);
            for(String core : cores){
                String url ;
                if(base_url.endsWith(Config.SLASH)){
                    url = base_url + core;
                }else{
                    url = base_url+Config.SLASH+core;
                }
                HttpSolrServer server = new HttpSolrServer(url);
                servers.put(core, server);
            }
        }
        public HttpSolrServer newInstance(String collection){
            if(servers.containsKey(collection))
                return servers.get(collection);
            String base_url = ConfigUtil.getString(Config.BASE_URL);
            if(base_url.endsWith(Config.SLASH))
                base_url = base_url+collection;
            else
                base_url = base_url + Config.SLASH + collection;
            return servers.put(collection, new HttpSolrServer(base_url));
        }
    }
  • 相关阅读:
    java痛苦学习之路[十]--日常问题汇总
    我有回来了
    LeetCode[Array]----3Sum
    在Visual Stdio 2012中编译执行JM18.6的方法
    Android沉浸式状态栏兼容4.4手机的实现
    HTML5学习笔记(九):选择器详解
    HTML5学习笔记(八):CSS定位
    HTML5学习笔记(七):CSS盒子模型
    HTML5学习笔记(六):CSS基本样式
    HTML5学习笔记(五):CSS基础
  • 原文地址:https://www.cnblogs.com/a198720/p/4281888.html
Copyright © 2011-2022 走看看