tomcat启动慢_Hack下mongodb jdbc driver启动慢

d1fa887ad3df5b0e4550026a41b3f4dd.png

Mongodb是我非常喜爱的数据库,最近我将数据库升级到4.0,jdbc driver升级到3.9.1。

不过遇到问题是:mongo jdbc driver启动特别慢。一般耗时30~40秒。

mongoClient=MongoClients.create( settings );

起先怀疑是java.security.SecureRandom捣鬼,后来发现并不是这样。经过不断摘取mongo jdbc driver的ObjectId代码,跟踪到是这个方法运行特别慢。

private static short createProcessIdentifier() {
        short processId;
        try {
            RuntimeMXBean runtimeMXBean=java.lang.management.ManagementFactory.getRuntimeMXBean();
            System.out.println( "Mxbean:"+new Date() ); // 添加的打印
	    String processName = runtimeMXBean.getName();
            System.out.println( "Mxbean getname:"+new Date() ); // 添加的打印
            if (processName.contains("@")) {
                processId = (short) Integer.parseInt(processName.substring(0, processName.indexOf('@')));
            } else {
                processId = (short) runtimeMXBean.getName().hashCode();
            }

        } catch (Throwable t) {
            // JMX not available on Android, use SecureRandom instead
            processId = (short) new SecureRandom().nextInt();
            //LOGGER.debug("Failed to get process identifier from JMX, using SecureRandom instead");
        }

        return processId;
    }

String processName = runtimeMXBean.getName(); 耗时30秒左右。

搞了半天,也找不到为什么慢的资料。只好随手hack一下:

  1. 在我的java工程test里面,创建这个类:org.bson.types.ObjectId
  2. 把官方的ObjectId代码复制进来,注释掉 try / catch,直接使用processId = (short) new SecureRandom().nextInt();
  3. Done

这样,无论我的tomcat还是junit测试,都优先加载我“覆盖”编写的ObjectId,而不是mongo-jdbc-driver-xxx.jar里面的ObjectId。从30~40秒等待降到1秒,大幅提高开发效率!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值