基於elasticsearch6.2.3版本自定義插件開發遇到的問題總結
項目背景:
原本工業APP的知識文章之類的存儲在MySQL中,但是在後期的開發中發現在查詢的時候又不滿足業務的模糊查詢需求並且需要兼容前期的設計(ID為數值型的要求)。
項目構建:
項目利用gradle構建,利用shadowJar插件來打包需要的程序代碼,默認打包的包含程序代碼和依賴,但是開發插件是不能將es打包會造成包衝突。代碼如圖:
開發過程:
1、繼承Plugin類和實現ActionPlugin介面並將插件名稱註冊即可;
2、自定義類繼承BaseRestHandler,在構造方法中註冊自定義的uri,並且prepareRequest方法中完成自定義的實現方式,ID自增的方式是本機IP地址奇數乘積後相加然後加上當前的毫秒時間戳不大於19為long的最大值即可。
下面介紹一下plugin-descriptor.properties文件:
description:插件描述
name: 插件名稱
version : 版本號
classname : 自定義插件的全路徑名
java.version : Java版本號
elasticsearch.version : elasticsearch 版本號
以下是打包運行時出現的問題:
一:elasticsearch插件目錄問題:
在開發elasticsearch6.2.3插件時編寫好插件後,把插件上傳到plugins目錄下
載入時
./elasticsearch-plugin install file:///opt/elasticsearch-6.2.3/plugins/elasticsearch.zip
會報錯如下:
ERROR: `elasticsearch` directory is missing in the plugin zip
可是的zip包中確實包含了elasticsearch文件目錄,這條路暫時走不通了(也許是我沒有理解官網的意思,英文是硬傷啊)。
另一個思路開始:
既然官網的說jar包和配置文件都必須包含在elasticsearch目錄,那麼就直接在plugins目錄下建立elasticsearch目錄,然後把jar包和配置文件上傳到此目錄,然後啟動elasticsearch,結果成功了,目錄結果如下
:
另一種解決方案:
可以在moudles目錄下建立目錄如:xx目錄,將jar包和配置文件上傳至此目錄,如下圖:
elasticsearch啟動後會自動載入它。
二:Java安全框架問題總結:
在開發elasticsearch框架時會遇到java.security.AccessControlException異常,因為es啟動不能用root賬戶啟動,如果項目中需要用到Redis或者zookeeper或者讀文件或者資料庫等,可能也會有一下問題。
解決方案:
在$JAVA_HOME/lib/security/java.policy加入相應許可權即可:
permission java.io.FilePermission "file:/opt/elasticsearch-6.2.3/modules/key-plugin/conf/xxx.properties", "read";
permission javax.management.MBeanServerPermission "createMBeanServer";
permission javax.management.MBeanPermission "org.apache.commons.pool2.impl.GenericObjectPool#-[org.apache.commons.pool2:name=pool,type=GenericObjectPool]", "registerMBean";
permission javax.management.MBeanTrustPermission "register";
permission java.lang.RuntimePermission "getClassLoader";
permission java.net.SocketPermission "xxxx.xxxx.xx.xx:6379","connect,resolve";
permission java.net.SocketPermission "xxxx.xxxx.xx.xx:2181","connect,resolve";
[昆明]大觀公園:巨型月亮光影水景營造美麗中秋「夜色」
※WEB測試項目實戰——測試用例架構搭建
※基於vue2.0 +vuex+ element-ui後台管理系統:本地調試詳細步驟
TAG:程序員小新人學習 |