{message:Parsed configuration file: 'class path resource [mybatisConfig.xml]'}啓動卡死

問題描述:

重新啓動一個早已經運行很長時間的項目,當進行到如下進度時,啓動卡死,沒有拋出任何異常:

2014-05-07 10:45:23 [DEBUG] [org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)] -- {message:Eagerly caching bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' to allow for resolving potential circular references}
2014-05-07 10:45:23 [DEBUG] [org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)] -- {message:Finished creating instance of bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0'}
2014-05-07 10:45:23 [DEBUG] [org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)] -- {message:Finished creating instance of bean 'org.springframework.transaction.config.internalTransactionAdvisor'}
2014-05-07 10:45:23 [DEBUG] [org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)] -- {message:Finished creating instance of bean 'dataSource'}
2014-05-07 10:45:23 [DEBUG] [org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1498)] -- {message:Invoking afterPropertiesSet() on bean with name 'sqlSessionFactory'}
2014-05-07 10:45:23 [DEBUG] [org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl.debug(JakartaCommonsLoggingImpl.java:46)] -- {message:Parsed configuration file: 'class path resource [mybatisConfig.xml]'}
2014-05-07 11:32:02 [DEBUG] [org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl.debug(JakartaCommonsLoggingImpl.java:46)] -- {message:Property 'mapperLocations' was not specified or no matching resources found}
2014-05-07 11:32:02 [DEBUG] [org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:245)] -- {message:Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'}
2014-05-07 11:32:02 [DEBUG] [org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)] -- {message:Finished creating instance of bean 'sqlSessionFactory'}

從日誌中可以看出,一直到11:32,也就是過了47分鐘之後,才繼續往下啓動。


原因分析:

spring加載mybatisCofig.xml,考慮是不是數據庫連接問題,查詢配置信息如下:

initialSize=10
maxActive=20
maxWait=60000

1.考慮連接數據庫連接數問題,經查,數據庫連接數有300,已使用還只有100多

2.考慮連接等待時間問題,將maxWait時間改爲6000,也就是6s,啓動之後還是一樣卡死

3,查詢dbcp連接配置,增加如下配置,打印dbcp連接日誌:

<!--removeAbandoned: 是否自動回收超時連接--> 
<property name="removeAbandoned" value="true"/> 
<!--removeAbandonedTimeout: 超時時間(以秒數爲單位)--> 
<property name="removeAbandonedTimeout" value="180"/> 
<!--maxWait: 超時等待時間以毫秒爲單位 6000毫秒/1000等於60秒--> 

同時spring中做相應配置改變。

此時啓動,發現啓動不再卡死,很快就啓動完畢,同時拋出異常。

2014-05-07 11:59:18 [DEBUG] [org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1498)] -- {message:Invoking afterPropertiesSet() on bean with name 'sqlSessionFactory'}
2014-05-07 11:59:19 [DEBUG] [org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl.debug(JakartaCommonsLoggingImpl.java:46)] -- {message:Parsed configuration file: 'class path resource [mybatisConfig.xml]'}
AbandonedObjectPool is used (org.apache.commons.dbcp.AbandonedObjectPool@2cea3932)
   LogAbandoned: true
   RemoveAbandoned: true
   RemoveAbandonedTimeout: 10
2014-05-07 12:00:25 [ERROR] [org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl.error(JakartaCommonsLoggingImpl.java:38)] -- {message:Could not get a databaseId from dataSource}
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Io 異常: Connection reset)
        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1244)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:882)
        at org.apache.ibatis.mapping.VendorDatabaseIdProvider.getDatabaseProductName(VendorDatabaseIdProvider.java:76)
        at org.apache.ibatis.mapping.VendorDatabaseIdProvider.getDatabaseName(VendorDatabaseIdProvider.java:61)
        at org.apache.ibatis.mapping.VendorDatabaseIdProvider.getDatabaseId(VendorDatabaseIdProvider.java:49)
        at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:445)
        at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:336)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.sql.SQLException: Io 異常: Connection reset
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:254)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:386)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:413)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:164)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:34)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:752)
        at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
        at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
        at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1266)
        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1240)
        ... 83 more

證明是數據庫本身存在問題,最終重啓oracle,解決問題。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章