给出一个有问题的单机多tomcat实例引用同一个solr实例部署图。这种部署必然造成一个问题,启动第二个tomcat实例时,一定会报索引文件夹文件锁已经被占用。
最初的解决办法是,有多少个tomcat实例,就部署多少个solr的war包。然后依次修改每个solr的core的data路径。如此完成线上部署,实在麻烦,而且容易出错!
今天请教了位有多年solr经验的同事,终于了了这个心结。
在Java的启动参数 -Dname=value 上做文章。在启动参数上添加一个标志这个实例的独特参数。譬如:
-Dmyid=server1
然后再solrconfig.xml的data路径里读取这个参数,示例如下:
<dataDir>/export/data/solr_data/jd_waiter/${myid}</dataDir>
实例不同,${myid}就不同,路径也就不同。如此一来,一台server,不管你要起多少个solr实例,都只用部署一套solr war包,用相同的配置就可以了!
化繁为简的招数。
解释下-D<name>=<value>,java -help里的文档是,set a system property,设置一个系统属性。通过System.getProperty()方法就可以获取java启动参数里的-D值。