玩转Solr源码之—Solr源码Debug
这篇文章是玩转Solr源码系列的第二篇,紧接着上一篇的源码导入,如果你还对如何将Solr源码导入到IDE还不了解的话,建议先看源码导入的部分。
定位源码入口
Solr 的源码入口为org.apache.solr.client.solrj.StartSolrJetty,主方法也比较简短,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public static void main( String[] args )
{
//System.setProperty("solr.solr.home", "../../../example/solr");
Server server = new Server();
ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory());
// Set some timeout options to make debugging easier.
connector.setIdleTimeout(1000 * 60 * 60);
connector.setSoLingerTime(-1);
connector.setPort(8983);
server.setConnectors(new Connector[] { connector });
WebAppContext bb = new WebAppContext();
bb.setServer(server);
bb.setContextPath("/solr");
bb.setWar("webapp/web");
// // START JMX SERVER
// if( true ) {
// MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
// MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer);
// server.getContainer().addEventListener(mBeanContainer);
// mBeanContainer.start();
// }
server.setHandler(bb);
try {
System.out.println(">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP");
server.start();
while (System.in.available() == 0) {
Thread.sleep(5000);
}
server.stop();
server.join();
}
catch (Exception e) {
e.printStackTrace();
System.exit(100);
}
}
配置Solr Home
为了能够进行源码的bug,我们需要配置好solr_home,这里我们可以直接使用官方的Solr发行包中的example来做演示(真实的开发中,一般会有自己定义好的solr_home),直接下载solr的发行包(这里以solr-7.7.2为例子)1
2
3
4
5
6cd ~/Documents
curl "http://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.7.2/solr-7.7.2.tgz" -o solr-7.7.2.tgz && tar -xvf solr-7.7.2.tgz
mkdir solr_home && cd solr_home
cp ~/Documents/solr-7.7.2/server/solr/solr.xml ./
cp -r ~/Documents/solr-7.7.2/server/solr/configsets/sample_techproducts_configs ./
echo "collection=TEST" > sample_techproducts_configs/core.properties
这里简单解释下最后一个命令(echo “collection=TEST …”)的含义,Solr中有collection和core的概念。
- Collection
Solr中的collection由一个或者多个core组成,一个collection对应一份独立的config,在单节点的模式下,core和collection是等价的,在集群模式下,一个collection会有多个分片(shard)组成,每个分片又可以又多个副本(replica),每个shard对应一个core- core
Solr中的core是一个包含index和config的运行实例配置StartSolrJetty
solr中的solr_home 可以通过通过环境变量进行设置,直接上代码
1 System.setProperty("solr.solr.home", "/home/fql/Documents/solr_home");
还有一个地方需要改动,否则程序无法正常启动,直接上代码1
bb.setWar("webapp/web"); ==> bb.setWar("solr/webapp/web");
设置完毕之后就可以启动StartSolrJetty后直接在浏览器中输入http://127.0.0.1:8983/solr就可以开始畅游solr的源码啦.![本地访问](https://s2.ax1x.com/2019/10/02/udq8Tx.png)
小技巧
StartSolrJetty默认的配置是没有太多的日志输出的,但是既然我们都已经开始debug solr的源代码了,还是输出更多的日志帮助我们更好的分析源码吧,同样,开启debug日志的代码也比较简单1
System.setProperty("log4j2.debug","true");
这样我们就剋有看到所有的日志啦。下一篇我们将要介绍如果将修改过的solr源码部署到公司或者个人的nexus仓库,也是本系列的最后一篇。