{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,解决问题。





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