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

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

  1. package com.li.util;
  2.  
  3. import java.util.ResourceBundle;
  4.  
  5. public class ConfigUtil {
  6. private static ResourceBundle resouceBundle = ResourceBundle.getBundle(Config.SEARCH);
  7. public static String getString(String key){
  8. return resouceBundle.getString(key);
  9. }
  10. }

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

  1. package com.li.util;
  2.  
  3. public class Config {
  4.  
  5. //common
  6. public static final String COMMA = ",";
  7. public static final String UNDERLINE = "_";
  8. public static final String SINGE_BLANK =" ";
  9. public static final String SLASH ="/";
  10. public static final String COLON =":";
  11.  
  12. public static final String BASE_URL = "base_url";
  13. public static final String CORES = "cores";
  14.  
  15. //配置文件
  16. public static final String SEARCH = "solr-config";
  17.  
  18. }

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

  1. package com.li.solrj;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import org.apache.solr.client.solrj.impl.HttpSolrServer;
  7.  
  8. import com.li.util.Config;
  9. import com.li.util.ConfigUtil;
  10.  
  11. /**
  12. * 创建一个HttpSolrServer的静态工厂方法,
  13. * 用于创建多个集合的单例模式
  14. * @author Administrator
  15. *
  16. */
  17. public class SolrServerFactory {
  18.  
  19. public static Map<String,HttpSolrServer> servers ;
  20.  
  21. static {
  22. servers = new HashMap<String,HttpSolrServer>();
  23. //静态加载所有的solrServer
  24. String[] cores = ConfigUtil.getString(Config.CORES).split(Config.COMMA);
  25. String base_url = ConfigUtil.getString(Config.BASE_URL);
  26. for(String core : cores){
  27. String url ;
  28. if(base_url.endsWith(Config.SLASH)){
  29. url = base_url + core;
  30. }else{
  31. url = base_url+Config.SLASH+core;
  32. }
  33. HttpSolrServer server = new HttpSolrServer(url);
  34. servers.put(core, server);
  35. }
  36. }
  37. public HttpSolrServer newInstance(String collection){
  38. if(servers.containsKey(collection))
  39. return servers.get(collection);
  40. String base_url = ConfigUtil.getString(Config.BASE_URL);
  41. if(base_url.endsWith(Config.SLASH))
  42. base_url = base_url+collection;
  43. else
  44. base_url = base_url + Config.SLASH + collection;
  45. return servers.put(collection, new HttpSolrServer(base_url));
  46. }
  47. }

HttpSolrServer-采用静态工厂方法,创建HttpSolrServer单实例的更多相关文章

  1. 学习Spring(二) 调用静态工厂方法创建Bean

    1,创建抽象的产品类 package com.robert.spring.shop; public abstract class Product { } 2,创建具体产品类 package com.r ...

  2. Java - 用静态工厂方法代替构造器

    Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静 ...

  3. Spring学习--静态工厂方法、实例工厂方法创建 Bean

    通过调用静态工厂方法创建 bean: 调用静态工厂方法创建 bean 是将对象创建的过程封装到静态方法中 , 当客户端需要对象时 , 只需要简单地调用静态方法 , 而不需要关心创建对象的细节. 要声明 ...

  4. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

      工厂方法模式:   定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类.   应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较 ...

  5. 静态工厂方法和实例工厂方法及普通的bean

    容纳你的bean  bean工厂:最简单的容器,提供了基础的依赖注入支持.创建各种类型的Bean.  应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务. ...

  6. [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Spring(十三):使用工厂方法来配置Bean的两种方式(静态工厂方法&实例工厂方法)

    通过调用静态工厂方法创建Bean 1)调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当客户端需要对象时,只需要简单地调用静态方法,而不需要关心创建对象的具体细节. 2)要声明通过静态 ...

  8. Spring 工厂方法创建Bean 学习(三)

    1, 静态工厂方法创建Bean 调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节. 要声明通过静态方法创建 ...

  9. <创建和销毁对象>经验法则——考虑用静态工厂方法代替公有构造方法

    一.引出静态工厂方法 对于java类而言,为了让使用者获取它自身的一个实例化对象,会有以下方法: 1.该类提供一个公有的构造方法.在这种情况下,程序可以通过多个“new 构造方法”语句来创建类的任意多 ...

随机推荐

  1. pyQt 每日一练习 -- 登录框

    #coding=utf-8 #第一个练习,登录框 import sys from PyQt4 import QtGui,QtCore #登录框 class LoginBox(QtGui.QWidget ...

  2. 咏南多层开发框架支持最新的DELPHI 10 SEATTLE

    购买了咏南多层开发框架的老用户如有需要提供免费升级. 中间件

  3. HDU 4870 Rating(高斯消元 )

    HDU 4870   Rating 这是前几天多校的题目,高了好久突然听旁边的大神推出来说是可以用高斯消元,一直喊着赶快敲模板,对于从来没有接触过高斯消元的我来说根本就是一头雾水,无赖之下这几天做DP ...

  4. UVaLive 6698 Sightseeing Bus Drivers (水题,贪心)

    题意:n个工人,有n件工作a,n件工作b,每个工人干一件a和一件b,a[i] ,b[i]代表工作时间,如果a[i]+b[j]>t,则老板要额外付钱a[i]+b[j]-t;现在要求老板付钱最少: ...

  5. 分享一下jQuery UI的地址

    jQuery EasyUI: http://www.jeasyui.com/ DWZ: http://j-ui.com/ Liger UI: http://www.ligerui.com/ Liger ...

  6. CentOS常用查看系统命令

    系统 uname -a                 查看内核/操作系统/CPU信息head -n 1 /etc/issue  查看操作系统版本cat /proc/cpuinfo       查看C ...

  7. Map排序——按key排序,按value排序

    注:转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5959279.html 上一篇博文谈到了集合类的自定义排序方式,那么进一步扩展开来,与集合同等重要的Map有 ...

  8. JQuery 的bind和unbind函数

    测试:页面代码:<body>     <input type="button" name="aaa" value="点击我" ...

  9. 【转】Android -- Looper.prepare()和Looper.loop()

    Looper.prepare()和Looper.loop() 原文地址:http://blog.csdn.net/heng615975867/article/details/9194219 Andro ...

  10. CDocument类的UpdateAllViews()成员函数

    (一)UpdateAllViews() 与 Invalidate()的区别 UpdateAllViews()是在DOC/VIEW结构中,当一个视图的数据改变后,通知所有视图作相应的改变,和重画毫无关系 ...