前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java:commons pool2 在android下的使用

java:commons pool2 在android下的使用

作者头像
10km
发布2019-05-25 22:20:15
8750
发布2019-05-25 22:20:15
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433660

Apache Commons Pool是一个开源的实现资源池的中间件。我们的项目中用到了它(Commons Pool 2),最近开始在android下测试时发现会抛出ClassNotFoundException异常,就是找不到java.lang.management.ManagementFactory类。

根本的原因就是Commons Pool用到了JMX,而android并不支持JMX。

github上这个错误报告有跟贴说明了原因《Jedis 2.3.x can’t use on Android》

这是2014年的报告 ,现在Commons Pool 2已经解决了这个问题。

解决问题的办法也很简单,org.apache.commons.pool2.impl.BaseObjectPoolConfig设计有一个jmxEnabled成员用于调用方设置是否支持JMX,所以在创建GenericObjectPool对象时,构造方法中GenericObjectPoolConfig参数只要指定jmxEnabledfalse就可以了。

示例代码如下:

代码语言:javascript
复制
    // 静态常量
    private static final boolean jmxEnable = isJmxEnable();
    /**
     * 判断JVM是否支持JMX,android下返回{@code false}
     * @return
     */
    private static boolean isJmxEnable(){
        try{
            Class.forName("java.lang.management.ManagementFactory");
            return true;
        }catch(ClassNotFoundException e){
            return false;
        }
    }
    void testSomething(GenericObjectPoolConfig poolConfig){
        ...
        poolConfig.setJmxEnabled(jmxEnable);
        GenericObjectPool<T>  internalPool = new GenericObjectPool<T>(factory, poolConfig);
        ...
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档