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));
    }
}
原文地址:https://www.cnblogs.com/a198720/p/4281888.html