Idea新版本升级之后, 有了一个类似postman的工具, 惊为天人, 本文讲述在项目使用过程中这个插件遇到的一些稀奇古怪的问题.主要为nested exception is javax.management.InstanceAlreadyExistsException: MXBean already registered with name org.apache.commons.pool2:type=GenericObjectPool,name=pool2
在我们正常的开发过程中, 对 Rest Api 的测试是非常常见的, 例如 chrome 打开地址, 安装几个插件, postman 跑一跑…这些方式都是可以的, 但是最近突然发现项目上出现了一个小东西. Rest 接口的边上出现了一个类似于 main 方法边上的绿色小箭头(后文简称: 绿箭侠). 如下图所示.
好奇的我就点击了一下, 出现下图的显示
此时, 出现三个选项, 第三个就不看了, 在浏览器打开. 我们来看看第一个和第二个. 我点了一下 Run Http Request, 出现下图
不看返回结果对错, 目前这个状态是正确请求了我们的后台. 但是请求是错误的, 因为缺少了一些必须的参数. 这个时候这么看就有点鸡肋, 因为没地方可以传递参数, 使用场景就非常局限了.
然后我们看第二个, 第二个点击之后出现下图:
这个时候能看到的东西就比较多了, 起码在这个编辑器里面, 我们可以修改他的请求方式是 GET 还是 POST 什么的.
但是参数还是不知道能不能传, 或者是怎么传.
这时候编辑器右侧出现了两个小图标.
第一个看样子也知道, 是一个类似于查看历史记录的按钮. 第二个点击一下, 出现了下图所示:
点击第一个, 神奇的东西出现了
这里面是类似于 Idea 预置的一些 GET 请求方式, 一方面也告诉我们了 GET 请求的这些情况下, 我们应该使用什么方式来请求, 下面的 auth, post, test 我就不一一多说了, 看完这些东西, 我们正常的请求就很是流畅了.
但是事情到这里并没有结束, 如果结束了, 也就没有了本文存在的意义.
我们的项目存在多个, 我突然发现有的项目有绿箭侠, 有的项目没有. 虽然说通过 Tools 也能找到 Http Client, 可以使用, 但是少了这个绿箭侠, 我就感觉莫名的不爽, 本来很简洁的方式就被弄的很复杂. 于是乎就开始找寻这个为什么不存在的原因.
经过查阅资料, 他和 spring-boot-starter-actuator 有关(我司的项目上用的是 spring-boot-actuator). 项目中需要有这个东西才行. 看了一下, 的确是有这个依赖, 但是绿箭侠还是不在. 第二步需要的是配置 enable JMX agent, 发现也是正常配置好的.
随手搜索了一下全文, 发现了一个东西(关键词: jmx)
spring.jmx.enabled=false
很明显是这里配置的有问题, 于是乎把这个配置给干掉试试.
结果, 项目就跪了, 抛出了一个异常(省略部分异常信息):
nested exception is javax.management.InstanceAlreadyExistsException: MXBean already registered with name org.apache.commons.pool2:type=GenericObjectPool,name=pool2
然后就开始网上查找这个问题的原因所在. 大体原因是因为继承 GenericObjectPool 池, 然后自动注入导致名字冲突了.
网上问题的解决方案也是如此, 类似于在配置文件或者什么地方, 把 spring.jmx.enabled 的值设置为 false. 但是设置为 false 就会让我没办法拥有绿箭侠. 后来发现了一个配置
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
在我的 Configuration 自动注入的时候, 加上这个注解, 问题就迎刃而解.
这里参考了开源项目FastDFS_Client, 不是使用相同的东西, 但是遇到同样的错误, 解决了我的问题.
这个时候项目就可以正常运行了, 测试了一下原先的地方, 没有问题, 我的绿箭侠也出来了.