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));
}
}

最新文章

  1. iOS--UIScrollView图片动画切换【实现每次只加载3张图片,进而减少占用内存,可循环滚动】
  2. Java数据结构与排序算法——堆和堆排序
  3. table设置滚动条
  4. Nginx简单配置
  5. 《腾讯敏捷框架TAPD》研究
  6. Linux 下安装android
  7. MySQL 子查询 EXISTS 和 NOT EXISTS(转)
  8. 被忽视的TWaver功能(1)
  9. 运行safari提示:无法启动此程序,因为计算机中丢失 QTCF.dll
  10. 使用Django清理数据库中的数据
  11. Integer比较值的时候小心使用
  12. 关于flex4 list 高度适应内容
  13. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
  14. MVC或WebAPI发布后报错404问题的总结
  15. 计算机网络什么是OSI7层模型、TCP/IP4层模型理解
  16. target存放的是编译后的.class文件地方 默认情况下不会讲非class文件放入进入 如果要使用非.class文件 需要通过增加配置方式自动加入文件
  17. centos 安装elk监控
  18. 增加一条新记录,同时返回其自增id
  19. JDBC选择数据库实例
  20. es6中let,const区别与其用法

热门文章

  1. Percona Xtrabackup备份mysql(转)
  2. hdu 4738 Caocao&#39;s Bridges(桥的最小权值+去重)
  3. oradmin相关用法
  4. 行为识别(action recognition)相关资料
  5. js判断滚动方向
  6. java(2014版)连接数据库的工具类
  7. javascript js 内存泄露工具使用
  8. maven仓库介绍
  9. HTML第四天学习笔记
  10. Spket在Eclipse/MyEclipse下的安装和配置(图文教程)