最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

聊聊Druid register mbean error的問題

 更新時(shí)間:2021年11月19日 11:16:55   作者:ShadowWalker  
這篇文章主要介紹了Druid register mbean error的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

key: [com.alibaba.druid.stat.DruidDataSourceStatManager.addDataSource(DruidDataSourceStatManager.java:154)]  register mbean error

在使用數(shù)據(jù)庫(kù)連接池時(shí)(本文通用于其他使用jmx mbean的應(yīng)用),運(yùn)行幾天后出現(xiàn)如下錯(cuò)誤

2014/11/18 10:31:00,617 [ERROR] [localhost-startStop-6] [com.alibaba.druid.stat.DruidDataSourceStatManager.addDataSource(DruidDataSourceStatManager.java:154)]  register mbean error
javax.management.InstanceAlreadyExistsException: com.alibaba.druid:type=DruidDataSource,id=Druid MySQL DB pool
        at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
        at com.alibaba.druid.stat.DruidDataSourceStatManager.addDataSource(DruidDataSourceStatManager.java:152)
        at com.alibaba.druid.pool.DruidDataSource$1.run(DruidDataSource.java:1298)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.alibaba.druid.pool.DruidDataSource.registerMbean(DruidDataSource.java:1294)
        at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:623)
        at com.longdai.data.ConnectionManagerDruid.<init>(ConnectionManagerDruid.java:68)
        at com.longdai.data.ConnectionManager.getInstance(ConnectionManager.java:86)
        at com.longdai.data.dao.Database.<clinit>(Database.java:22)
        at com.longdai.service.admin.CloseNetWorkService.getNetWorkById(CloseNetWorkService.java:87)
        at com.longdai.service.admin.CloseNetWorkService$$FastClassByCGLIB$$bbdb465c.invoke(<generated>)
        at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
        at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at com.gozap.services.ServiceMethodInterceptor.invoke(ServiceMethodInterceptor.java:31)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
        at com.longdai.service.admin.CloseNetWorkService$$EnhancerByCGLIB$$19cbebaf.getNetWorkById(<generated>)
        at com.longdai.system.listener.CloseNetWorkConfigiListener.contextInitialized(CloseNetWorkConfigiListener.java:37)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:963)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1600)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

查看源碼,一直跟蹤到

at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484) // 這里
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312) //這里入口

一路跟蹤源碼,傳入的參數(shù)一直是name屬性,查看上層 DruidDataSourceStatManager.java  addDataSource(Object dataSource, String name) 

在看上層: DruidDataSource.java line:1298

這里傳入了數(shù)據(jù)源的name屬性,經(jīng)過(guò)上面的分析,是利用DataSource的name屬性拼接成一個(gè)id,然后用次id注冊(cè)mbean, 然而,druid的name屬性寫成了一個(gè)默認(rèn)值

故此注冊(cè)失敗。

現(xiàn)在知道了原因,為什么運(yùn)行幾天后才出現(xiàn)這個(gè)錯(cuò)誤,并且運(yùn)維說(shuō)有回滾到了上個(gè)版本,在部署(直接重新部署,并沒有重啟tomcat/jvm)的時(shí)候就直接報(bào)這個(gè)錯(cuò)誤,經(jīng)過(guò)上面的推斷是jvm中已經(jīng)有一個(gè)此id的mbean了,故此即使重新部署還是失敗,我給想了個(gè)辦法,重啟tomcat,搞定,果然奏效。

在來(lái)看看druid的wiki中,雖然提示了配置name屬性,但是在配置文件中配置后是不起作用的,經(jīng)過(guò)查看源碼發(fā)現(xiàn)并沒有加載次屬性,所以配置了沒用,后來(lái)我在代碼中獲取配置文件的name屬性,然后dataSource.setName(name),雖然名字設(shè)置成功了,在druid的監(jiān)控頁(yè)面也可以看的自定義的名字,但是不幸的是druid運(yùn)行幾天出錯(cuò)了或者重新部署,然后重新向jvm注冊(cè)mbean,導(dǎo)致了出錯(cuò)。

再來(lái)看看datasource的name的默認(rèn)值是怎么設(shè)置的DruidAbstractDataSource.java line: 849

可以看到在getName屬性中是DataSource-加上計(jì)算的一個(gè)hash值,但是此方法只在getName時(shí)返回,而在注冊(cè)mbean時(shí)druid的name默認(rèn)是null, 在注冊(cè)mbean時(shí)分析下面的代碼DruidDataSourceStatManager.java line: 161

代碼顯示是根據(jù)dataSource計(jì)算出來(lái)莪一個(gè)hash值,然后進(jìn)行注冊(cè)mbean。

經(jīng)過(guò)上面的分析在注冊(cè)mbean時(shí),一定要保證registerMBean的name參數(shù)唯一,還要在上層攔截異常

InstanceAlreadyExistsException,然后自動(dòng)處理異常

總結(jié):在使用Druid的時(shí)候,不要使用name屬性,druid官網(wǎng)并沒有給出說(shuō)明,本文在此給大家一個(gè)解釋和處理方法。另外1.0.5版本配置后是不起作用的,需要自己強(qiáng)行setName。如自己配置了name,為防止出錯(cuò),最好修改Druid源碼  DruidDataSourceStatManager.java  addDataSource(Object dataSource, String name) ,在生成objectName是在加一個(gè) hash(參考161)。另外大家在注冊(cè)MBean時(shí),一定要保證id的唯一,以及重復(fù)的處理方式。如果出現(xiàn)了這個(gè)錯(cuò)誤,就將與本項(xiàng)目使用的同一個(gè)jvm的項(xiàng)目都關(guān)掉,清理掉本jvm,然后重啟服務(wù)

附: https://github.com/alibaba/druid

到此這篇關(guān)于聊聊Druid register mbean error的問題的文章就介紹到這了,更多相關(guān)Druid register mbean error內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 2018年最值得一讀的互聯(lián)網(wǎng)書單

    2018年最值得一讀的互聯(lián)網(wǎng)書單

    2018年已經(jīng)過(guò)去了近三分之二了,是不是感覺時(shí)光匆匆、一去不復(fù)返,過(guò)去的時(shí)間我們追不回,但是我們可以更加珍惜以后的時(shí)間!下面這篇文章主要給大家分享了2018年最值得一讀的互聯(lián)網(wǎng)書單,希望以后的日子里大家可以多讀書,讀好書
    2018-08-08
  • VSCode各語(yǔ)言運(yùn)行環(huán)境配置方法示例詳解

    VSCode各語(yǔ)言運(yùn)行環(huán)境配置方法示例詳解

    這篇文章主要介紹了VSCode各語(yǔ)言運(yùn)行環(huán)境配置方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家介紹的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 一文詳解?OpenGL?ES?紋理顏色混合的方法

    一文詳解?OpenGL?ES?紋理顏色混合的方法

    在OpenGL中繪制的時(shí)候,有時(shí)候想使新畫的顏色和已經(jīng)有的顏色按照一定的方式進(jìn)行混合。怎么實(shí)現(xiàn)這個(gè)效果呢,下面小編給大家?guī)?lái)了OpenGL?ES?紋理顏色混合的實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • 將本地項(xiàng)目添加到git管理

    將本地項(xiàng)目添加到git管理

    這篇文章介紹了將本地項(xiàng)目添加到git管理的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • git pull時(shí)沖突的幾種解決方式(小結(jié))

    git pull時(shí)沖突的幾種解決方式(小結(jié))

    這篇文章主要介紹了git pull時(shí)沖突的幾種解決方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Selenium IDE安裝及使用

    Selenium IDE安裝及使用

    本文主要介紹了Selenium IDE安裝及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 在小程序中實(shí)現(xiàn)ChatGPT?聊天打字兼自動(dòng)滾動(dòng)效果

    在小程序中實(shí)現(xiàn)ChatGPT?聊天打字兼自動(dòng)滾動(dòng)效果

    ChatGPT已經(jīng)長(zhǎng)時(shí)間大火,未來(lái)將會(huì)是AI的天下,們需要更多地學(xué)習(xí)和掌握AI,而不是被AI所取代,在?ChatGPT?的背景下,我們今天來(lái)聊聊在小程序中怎么實(shí)現(xiàn)類似?chatGPT?的聊天打字效果,并且實(shí)現(xiàn)滾動(dòng)效果
    2023-06-06
  • 動(dòng)態(tài)語(yǔ)言、動(dòng)態(tài)類型語(yǔ)言、靜態(tài)類型語(yǔ)言、強(qiáng)類型語(yǔ)言、弱類型語(yǔ)言介紹

    動(dòng)態(tài)語(yǔ)言、動(dòng)態(tài)類型語(yǔ)言、靜態(tài)類型語(yǔ)言、強(qiáng)類型語(yǔ)言、弱類型語(yǔ)言介紹

    這篇文章主要介紹了動(dòng)態(tài)語(yǔ)言、動(dòng)態(tài)類型語(yǔ)言、靜態(tài)類型語(yǔ)言、強(qiáng)類型語(yǔ)言、弱類型語(yǔ)言介紹,需要的朋友可以參考下
    2015-04-04
  • 解釋執(zhí)行和編譯執(zhí)行的區(qū)別?

    解釋執(zhí)行和編譯執(zhí)行的區(qū)別?

    在說(shuō)解釋執(zhí)行和編譯執(zhí)行之前先說(shuō)幾個(gè)概念,需要的朋友可以參考下。
    2011-09-09
  • CommonLisp中解析命令行參數(shù)示例

    CommonLisp中解析命令行參數(shù)示例

    這篇文章主要為大家介紹了CommonLisp中解析命令行參數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論

旺苍县| 遂平县| 焉耆| 简阳市| 临澧县| 衡南县| 长岛县| 迁西县| 舟曲县| 屯门区| 阜新| 罗江县| 海盐县| 越西县| 开封县| 东辽县| 荣成市| 晴隆县| 灌云县| 鄢陵县| 蕉岭县| 徐水县| 阿鲁科尔沁旗| 分宜县| 曲周县| 新竹县| 临泉县| 宁陵县| 新化县| 麻城市| 登封市| 伊金霍洛旗| 林西县| 方山县| 竹北市| 阳江市| 阳曲县| 洛南县| 紫云| 溆浦县| 湟中县|