一种高性能的HttpSolrServer实例创建
来源:互联网 发布:excel2003 sql 编辑:程序博客网 时间:2024/05/19 01:14
solrj客户端段的httpserver的实例需要使用同一个HttpSolrServer实例,那么容易想到之前的单例模式。
单例模式见-->单例模式详解
实际使用中http方式连接的solrserver可能被经常调用,那么就存在并发和性能问题。如果应用场景的要求不高,那么简单的确保一个实例就可以满足要求。如果遇到多线程调用的查询接口那么需要确get server实例的同步,如果还存在频繁的调取查询,那么性能上还的保证此同步方法的高效率,从减少同步方法的判断次数来提高效率。看看如下的一种获取HttpSolrServer的创建方法:
public class SolrServerClient { private String SOLR_ADMIN_URL = "http://localhost:8983/solr/"; private static HttpSolrServer server = null; private volatile static SolrServerClient solrServiceClient = null; private SolrServerClient() { this.getServer(); } /** * SolrServerClient 是线程安全的 需要采用单例模式 * 此处实现方法适用于高频率调用查询 * * @return SolrServerClient */ public static SolrServerClient getInstance() { if (solrServiceClient == null) { synchronized (SolrServerClient.class) { if (solrServiceClient == null) { solrServiceClient = new SolrServerClient(); } } } return solrServiceClient; } /** * 初始化的HttpSolrServer 对象,并获取此唯一对象 * 配置按需调整 * @return 此server对象 */ private HttpSolrServer getServer() { if (server == null) { server = new HttpSolrServer(SOLR_ADMIN_URL); server.setConnectionTimeout(3000); server.setDefaultMaxConnectionsPerHost(100); server.setMaxTotalConnections(100); } return server; }}
分析:getServer是获取HttpSolrServer实例,SolrServerClient是单例模式中需要创建的实例,确保这个实例唯一,那么获取到的server就是同一对象,getInstance方法使用了一个双重加锁的方法返回对象实例,仅仅在首次创建的时候会进行同步方法的判断,以后获取实例同步块不执行。
volatile修饰单例的实例,确保在多线程下 此对象不同被被修,去判断是否为null时候可以得到正确的状态。
- 一种高性能的HttpSolrServer实例创建
- 一种高性能的服务器处理框架
- 创建高性能的索引
- 创建高性能的索引
- 创建高性能的虚拟机
- MySQL高性能 创建高性能的索引
- 高性能Mysql——创建高性能的索引
- [高性能MySQL]-创建高性能的索引
- 高性能Mysql 3(创建高性能的索引)
- 一种高性能网络游戏的的架构设计
- epoll学习:思考一种高性能的服务器处理框架
- epoll学习:思考一种高性能的服务器处理框架
- epoll学习:思考一种高性能的服务器处理框架
- epoll学习:思考一种高性能的服务器处理框架
- epoll学习:思考一种高性能的服务器处理框架
- epoll学习:思考一种高性能的服务器处理框架
- epoll学习:思考一种高性能的服务器处理框架
- 思考一种高性能的服务器处理框架
- Linux重定向输出
- 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南三——对话框和控件编程
- 线性表之顺序表插入元素
- 快速排序
- JAVA---字符串中随机取四位数
- 一种高性能的HttpSolrServer实例创建
- ABAP指针
- 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南四——使用 GDI 函数
- 解决VMware虚拟机在netcore nw703路由器下无法上网的问题
- oracle中BLOB和CLOB的区别
- Linux shell cat 初阶用法
- 华为2014机考样题及答案
- Seven_Training
- OCM考纲