
Idea新版本升級(jí)之后, 有了一個(gè)類(lèi)似postman的工具, 驚為天人, 本文講述在項(xiàng)目使用過(guò)程中這個(gè)插件遇到的一些稀奇古怪的問(wèn)題.主要為nested exception is javax.management.InstanceAlreadyExistsException: MXBean already registered with name org.apache.commons.pool2:type=GenericObjectPool,name=pool2
在我們正常的開(kāi)發(fā)過(guò)程中, 對(duì) Rest Api 的測(cè)試是非常常見(jiàn)的, 例如 chrome 打開(kāi)地址, 安裝幾個(gè)插件, postman 跑一跑...這些方式都是可以的, 但是最近突然發(fā)現(xiàn)項(xiàng)目上出現(xiàn)了一個(gè)小東西. Rest 接口的邊上出現(xiàn)了一個(gè)類(lèi)似于 main 方法邊上的綠色小箭頭(后文簡(jiǎn)稱(chēng): 綠箭俠). 如下圖所示.

好奇的我就點(diǎn)擊了一下, 出現(xiàn)下圖的顯示

此時(shí), 出現(xiàn)三個(gè)選項(xiàng), 第三個(gè)就不看了, 在瀏覽器打開(kāi). 我們來(lái)看看第一個(gè)和第二個(gè). 我點(diǎn)了一下 Run Http Request, 出現(xiàn)下圖

不看返回結(jié)果對(duì)錯(cuò), 目前這個(gè)狀態(tài)是正確請(qǐng)求了我們的后臺(tái). 但是請(qǐng)求是錯(cuò)誤的, 因?yàn)槿鄙倭艘恍┍仨毜膮?shù). 這個(gè)時(shí)候這么看就有點(diǎn)雞肋, 因?yàn)闆](méi)地方可以傳遞參數(shù), 使用場(chǎng)景就非常局限了.
然后我們看第二個(gè), 第二個(gè)點(diǎn)擊之后出現(xiàn)下圖:

這個(gè)時(shí)候能看到的東西就比較多了, 起碼在這個(gè)編輯器里面, 我們可以修改他的請(qǐng)求方式是 GET 還是 POST 什么的.
但是參數(shù)還是不知道能不能傳, 或者是怎么傳.
這時(shí)候編輯器右側(cè)出現(xiàn)了兩個(gè)小圖標(biāo).

第一個(gè)看樣子也知道, 是一個(gè)類(lèi)似于查看歷史記錄的按鈕. 第二個(gè)點(diǎn)擊一下, 出現(xiàn)了下圖所示:

點(diǎn)擊第一個(gè), 神奇的東西出現(xiàn)了

這里面是類(lèi)似于 Idea 預(yù)置的一些 GET 請(qǐng)求方式, 一方面也告訴我們了 GET 請(qǐng)求的這些情況下, 我們應(yīng)該使用什么方式來(lái)請(qǐng)求, 下面的 auth, post, test 我就不一一多說(shuō)了, 看完這些東西, 我們正常的請(qǐng)求就很是流暢了.
但是事情到這里并沒(méi)有結(jié)束, 如果結(jié)束了, 也就沒(méi)有了本文存在的意義.
我們的項(xiàng)目存在多個(gè), 我突然發(fā)現(xiàn)有的項(xiàng)目有綠箭俠, 有的項(xiàng)目沒(méi)有. 雖然說(shuō)通過(guò) Tools 也能找到 Http Client, 可以使用, 但是少了這個(gè)綠箭俠, 我就感覺(jué)莫名的不爽, 本來(lái)很簡(jiǎn)潔的方式就被弄的很復(fù)雜. 于是乎就開(kāi)始找尋這個(gè)為什么不存在的原因.
經(jīng)過(guò)查閱資料, 他和 spring-boot-starter-actuator 有關(guān)(我司的項(xiàng)目上用的是 spring-boot-actuator). 項(xiàng)目中需要有這個(gè)東西才行. 看了一下, 的確是有這個(gè)依賴(lài), 但是綠箭俠還是不在. 第二步需要的是配置 enable JMX agent, 發(fā)現(xiàn)也是正常配置好的.

隨手搜索了一下全文, 發(fā)現(xiàn)了一個(gè)東西(關(guān)鍵詞: jmx)
spring.jmx.enabled=false
很明顯是這里配置的有問(wèn)題, 于是乎把這個(gè)配置給干掉試試.
結(jié)果, 項(xiàng)目就跪了, 拋出了一個(gè)異常(省略部分異常信息):
nested exception is javax.management.InstanceAlreadyExistsException: MXBean already registered with name org.apache.commons.pool2:type=GenericObjectPool,name=pool2
然后就開(kāi)始網(wǎng)上查找這個(gè)問(wèn)題的原因所在. 大體原因是因?yàn)槔^承 GenericObjectPool 池, 然后自動(dòng)注入導(dǎo)致名字沖突了.
網(wǎng)上問(wèn)題的解決方案也是如此, 類(lèi)似于在配置文件或者什么地方, 把 spring.jmx.enabled 的值設(shè)置為 false. 但是設(shè)置為 false 就會(huì)讓我沒(méi)辦法擁有綠箭俠. 后來(lái)發(fā)現(xiàn)了一個(gè)配置
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
在我的 Configuration 自動(dòng)注入的時(shí)候, 加上這個(gè)注解, 問(wèn)題就迎刃而解.
這里參考了開(kāi)源項(xiàng)目FastDFS_Client, 不是使用相同的東西, 但是遇到同樣的錯(cuò)誤, 解決了我的問(wèn)題.
這個(gè)時(shí)候項(xiàng)目就可以正常運(yùn)行了, 測(cè)試了一下原先的地方, 沒(méi)有問(wèn)題, 我的綠箭俠也出來(lái)了.
個(gè)人博客地址: IntelliJ IDEA 插件Rest Client 插件使用過(guò)程遇到的問(wèn)題