spring boot與elasticsearch集成有兩種方式。一種是直接使用elasticsearch。一種是使用data中間件。
本文只指針使用maven集成elasticsearch 5.x,以及使用spring-boot-starter-data-elasticsearch中間件的情況。不包含以上兩種情況請忽略。
第一種方式,本來沒什么好說的。新建一個maven項目,引入spring boot相關依賴,再導入elasticsearch的依賴。但是,問題出現了:
依賴:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.2.1</version>
</dependency>
得到的jar包:
導入的是5.x的版本,最終得到的2.x的版本。lucene也是5.x版本。可能有的人會說,應該顯示指定elasticsearch版本啊。
首先,在transport的項目中已經引入了es的依賴。不需在項目中重復引入。
其次,在非spring boot的項目中,只引入transport就可以了。
那么,問題只能是出在spring boot上面。
后來檢查發布引入了<parent>,spring boot會自動選擇最合適的版本進行添加。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath />
</parent>
找到spring boot 1.5.3.RELEASE的源碼,https://github.com/spring-projects/spring-boot/blob/1.5.x/spring-boot-dependencies/pom.xml。確實在這個版本中,引入的是elasticsearch2.x。因為使用了parent,所以,父級的依賴優先級最高。所以直接下載了spring boot 1.5.3.RELEASE所依賴的版本。而非子依賴的版本。
https://github.com/spring-projects/spring-boot/blob/1.5.x/spring-boot-dependencies/pom.xml
那么要想到spring boot中引入es的5.x版本,兩種方式,第一種, A:顯式引入es依賴,或者,B:覆蓋掉spring boot的es版本。第二種,C:去掉<parent>依賴,手動添加spring-boot的依賴。三個選項的關系:(A||B)||(C)。
<properties> <elasticsearch.version>5.4.3</elasticsearch.version> </properties>
或者
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>5.4.3</version> </dependency>
第二種方式。好消息是spring已經正式發布版本支持es 5.0版本了。
spring data elasticsearch | elasticsearch |
---|---|
3.0.0.RC2 | 5.5.0 |
3.0.0.M4 | 5.4.0 |
2.0.4.RELEASE | 2.4.0 |
2.0.0.RELEASE | 2.2.0 |
1.4.0.M1 | 1.7.3 |
1.3.0.RELEASE | 1.5.2 |
1.2.0.RELEASE | 1.4.4 |
1.1.0.RELEASE | 1.3.2 |
1.0.0.RELEASE | 1.1.1 |
不過,發布才不到一個月,直接用maven還下載不了。需要手動。
壞消息是,spring boot集成了與elasticsearch 5.x的版本,但還算不上正式發布。最新的正式版本只支持到2.4。
spring data elasticsearch | elasticsearch |
---|---|
2.0.4.RELEASE | 2.4.0 |
2.0.0.RELEASE | 2.2.0 |
1.4.0.M1 | 1.7.3 |
1.3.0.RELEASE | 1.5.2 |
1.2.0.RELEASE | 1.4.4 |
1.1.0.RELEASE | 1.3.2 |
1.0.0.RELEASE | 1.1.1 |
在非正式的版本中,jdk9和endpoint-infrastructure 這兩個branches中,使用的是es 5.x版本。然而,尷尬的是,不久前,這兩個版本都被打上了紅叉。
想嘗鮮的朋友,也可以去看一下最新的發布版本,2.0以上的都是使用了es 5.x版本。不過,不知道是使用的哪個branches發布,慎重使用。
以上版本,都剛發布不久,還沒有被maven倉庫收錄。如果想使用,只能把代碼拉到本地,編譯,放入自己的倉庫。不過,在可期的未來應該會有穩定的使用es 5.0的spring boot版本發布。