国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

公司ES升級(jí)帶來的坑怎么填?

big_cat / 1673人閱讀

摘要:前言公司的最近需要全部進(jìn)行升級(jí),目的是方便維護(hù)和統(tǒng)一管理。以前的版本不統(tǒng)一,這次準(zhǔn)備統(tǒng)一升級(jí)到一個(gè)固定的版本。帶來的問題就是我這邊的程序得改了,目前用的是來操作。升級(jí)完之后又有坑了。下載地址以上就是這次升級(jí)過程中踩過的坑,分享給大家。

前言

公司的ES最近需要全部進(jìn)行升級(jí),目的是方便維護(hù)和統(tǒng)一管理。以前的版本不統(tǒng)一,這次準(zhǔn)備統(tǒng)一升級(jí)到一個(gè)固定的版本。

同時(shí)還會(huì)給ES加上權(quán)限控制,雖然都是部署在內(nèi)網(wǎng),為了防止誤操作,加上權(quán)限還是有必要的。

帶來的問題就是我這邊的程序得改了,目前用的是Spring Data Elasticsearch來操作ES。

問題

首先版本從5.x升級(jí)到6.4.0,我這邊用的Spring Boot是2.0.1版本,這塊是兼容的,沒有影響。唯一導(dǎo)致我這邊要改動(dòng)的就是權(quán)限這塊。

在Spring Boot的文檔中,提供了三種操作ES的框架,有兩種是走Http協(xié)議的,也就是操作9200端口,是可以直接支持用戶名和密碼配置的。

elasticsearch-rest-client

spring.elasticsearch.rest.uris=http://search.example.com:9200
spring.elasticsearch.rest.username=user
spring.elasticsearch.rest.password=secret

JestClient:

spring.elasticsearch.jest.uris=http://search.example.com:9200
spring.elasticsearch.jest.read-timeout=10000
spring.elasticsearch.jest.username=user
spring.elasticsearch.jest.password=secret

偏偏我用的是第三種Spring Data Elasticsearch,沒有認(rèn)證信息的配置,但是有一個(gè)擴(kuò)展屬性properties

@ConfigurationProperties(prefix = "spring.data.elasticsearch")
public class ElasticsearchProperties {

    /**
     * Elasticsearch cluster name.
     */
    private String clusterName = "elasticsearch";

    /**
     * Comma-separated list of cluster node addresses.
     */
    private String clusterNodes;

    /**
     * Additional properties used to configure the client.
     */
    private Map properties = new HashMap<>();
}

在TransportClientFactoryBean中初始化Settings的時(shí)候,會(huì)取properties中值

private Settings settings() {
    if (properties != null) {
            Settings.Builder builder = Settings.builder();

            properties.forEach((key, value) -> {
                builder.put(key.toString(), value.toString());
            });

            return builder.build();
    }
    return Settings.builder()
            .put("cluster.name", clusterName)
            .put("client.transport.sniff", clientTransportSniff)
            .put("client.transport.ignore_cluster_name", clientIgnoreClusterName)
            .put("client.transport.ping_timeout", clientPingTimeout)
            .put("client.transport.nodes_sampler_interval", clientNodesSamplerInterval)
            .build();
}

于是我在properties 中加上認(rèn)證信息的配置發(fā)現(xiàn)還是不行,因?yàn)檫@個(gè)全新認(rèn)證是擴(kuò)展的,需要增加x-pack-transport才行。



      org.elasticsearch.client
      x-pack-transport
      6.4.2

惡心的是中央倉庫沒有,還得指定倉庫:


      
      
         elasticsearch-releases
         https://artifacts.elastic.co/maven
         
            true
         
         
            false
         
      

當(dāng)你加入這些依賴之后你會(huì)發(fā)現(xiàn),還是不能采用spring.data.elasticsearch.xxx這種方式直接配置認(rèn)證信息,因?yàn)榈讓硬皇怯玫膞pack擴(kuò)展的client構(gòu)造的, 用的是PreBuiltTransportClient,看下代碼:

protected void buildClient() throws Exception {

    client = new PreBuiltTransportClient(settings());
        
    clusterNodes.stream() //
            .peek(it -> logger.info("Adding transport node : " + it.toString())) //
            .forEach(client::addTransportAddress);
        
    client.connectedNodes();
}

最終還是放棄了自動(dòng)配置的方式,自己手動(dòng)配置定義Client來支持權(quán)限認(rèn)證。

@Bean
public Client client() {
    try {
        Settings.Builder builder = Settings.builder()
                .put("client.transport.ping_timeout", pingTimeout)
                .put("cluster.name", clusterName)
                .put("xpack.security.user", username + ":" + password)
                .put("xpack.security.transport.ssl.enabled", "true")
                .put("xpack.security.transport.ssl.truststore.path", keystorePath)
                .put("xpack.security.transport.ssl.keystore.path", keystorePath)
                .put("xpack.security.transport.ssl.verification_mode", "certificate");
        Settings settings = builder.build();
        String[] nodes = clusterNodes.split(",");
        TransportAddress[] addressArray = new TransportAddress[nodes.length];
        for (int i = 0; i < nodes.length; i++) {
            String[] nodeArray = nodes[i].split(":");
            addressArray[i] = new TransportAddress(InetAddress.getByName(nodeArray[0]), Integer.parseInt(nodeArray[1]));
        }
        return new PreBuiltXPackTransportClient(settings).addTransportAddresses(addressArray);
    } catch (Exception e) {
        logger.error("初始化ESClient異常", e);
    }
    return null;
}

username:用戶名

password:密碼

keystorePath:證書地址,會(huì)有一個(gè).p12的證書

不知大家發(fā)現(xiàn)沒有,看上去我們自定義的代碼也沒什么特別,關(guān)鍵點(diǎn)在于PreBuiltXPackTransportClient,框架中用的是PreBuiltTransportClient,所以我們才需要自定義。

配置完了你會(huì)發(fā)現(xiàn)還是不行,各種jar沖突,Spring Boot的版本還需要升級(jí),于是只能升到目前最新的2.1.0版本。升級(jí)完之后又有坑了。

升級(jí)之前Data中的注解,要指定類型,keyword變成了Keyword

@Field(type=FieldType.Keyword)

ES的這個(gè)Field注解沒有別名映射的屬性,就是我es中存的u_name, 實(shí)體類中寫的是username,這個(gè)確實(shí)不太方便,像data mongodb中都有這樣的功能,有知道怎么解決的要給我留言哈,學(xué)習(xí)下。

然后就是security的一個(gè)坑了,升級(jí)之后security版本也升級(jí)了,下載下來的jar包用不了,錯(cuò)誤如下:

一開始以為是網(wǎng)絡(luò)原因,沒下載完,然后重新刪了再下,試了5次還是不行,最后沒辦法,我手動(dòng)下載了spring-security-config這個(gè)包,替換了本地倉庫的jar。

下載地址:https://mvnrepository.com/art...

以上就是這次升級(jí)過程中踩過的坑,分享給大家。這次只是客戶端這塊的改變,至于ES是怎么開啟權(quán)限認(rèn)證的我這邊就不做講解了,因?yàn)檫@塊不是我弄的,所以我也不熟悉,等后面有機(jī)會(huì)我也去研究研究可以給大家分享,反正是基于xpack搞的。

歡迎加入我的知識(shí)星球,一起交流技術(shù),免費(fèi)學(xué)習(xí)猿天地的課程(http://cxytiandi.com/course)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/73534.html

相關(guān)文章

  • 做完小程序項(xiàng)目、老板給我加了6k薪資~

    摘要:大家好,我是平頭哥聯(lián)盟的首席填坑官蘇南,今天要給大家分享的是最近公司做的一個(gè)小程序項(xiàng)目,過程中的一些好的總結(jié)和遇到的坑,希望能給其他攻城獅帶來些許便利,更希望能做完之后老板給你加薪今天是中秋節(jié)的第一天,假日的清晨莫名的醒的特別早,不知道為什 showImg(https://segmentfault.com/img/bVbhAYf?w=1278&h=722);   大家好,我是@IT·平...

    z2xy 評(píng)論0 收藏0
  • 參加第二屆前端開發(fā)者年度大會(huì)總結(jié)

    摘要:代表公司去參加今年的第二屆前端開發(fā)者年度大會(huì),散會(huì)的時(shí)候,技術(shù)老大問我,今天感覺怎么樣,有什么收獲,當(dāng)時(shí)就零零碎碎的回答了一些,不算完美趁著還記得點(diǎn)什么,在這里做個(gè)自我回顧總結(jié),謹(jǐn)代表個(gè)人見解,有不當(dāng)之處,或若涉及圖片隱私或者其它問題,煩請(qǐng) 代表公司去參加今年的 第二屆前端開發(fā)者年度大會(huì),散會(huì)的時(shí)候,Team 技術(shù)老大問我,今天感覺怎么樣,有什么收獲,當(dāng)時(shí)就零零碎碎的回答了一些,不算完...

    solocoder 評(píng)論0 收藏0
  • 創(chuàng)業(yè)公司的 Nodejs 工程師

    創(chuàng)業(yè)團(tuán)隊(duì)擼 Node 前言 大家好,我是 Scott,2016 年 9 月 25 日在杭州大搜車總部舉行的杭州 Node Party 上分享了一個(gè)話題 - 《創(chuàng)業(yè)公司擼 Node》 ,分享之后我以文字的形式又記錄了一遍,分享給沒有與會(huì)的朋友,也方便大家通過搜索引擎者一些技術(shù)社區(qū)平臺(tái)來看到這篇文章。 寫在前面,感謝芋頭哥和大搜車,給了我這個(gè)機(jī)會(huì)跟大家在大搜車面基,說實(shí)話,從我出道以來,這還真的是我...

    liaoyg8023 評(píng)論0 收藏0
  • 使用React 應(yīng)當(dāng)注意的幾個(gè)地方

    摘要:都會(huì)造成錯(cuò)誤,注意一定一定嚴(yán)格的用,所以我建議直接復(fù)制我的。因?yàn)橛玫脑捤麜?huì)轉(zhuǎn)義代碼,寫不寫其實(shí)一個(gè)樣。不可避免的,構(gòu)建肯定是要用到的。這個(gè)時(shí)候一般用的是在外面保存然后里面調(diào)用第二個(gè)坑更隱蔽。 目標(biāo)人群 獻(xiàn)給熟悉基礎(chǔ)的React語法的剛接觸React的同學(xué)~ 如果你已經(jīng)寫過半年以上的React那也不用看了,畢竟我水平并不高 Whats React React 是一個(gè)不存在的網(wǎng)絡(luò)公司Fac...

    高璐 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<