前几天同事做的一个安卓项目,我协助他搭建服务端工程,ORM框架使用mybatis-3.1.0,mvc框架使用的spring mvc(3.2.13.RELEASE),数据库为Oracle11G。

        项目是非常简单,直连数据库查询。刚开始SqlSessionFactory是自己写的,包括SqlSession 也是自己创建和释放。一切都很完好,自己测试OK,联调OK。(公司环境为JDK1.6,服务器为redhat)

        放到现场后问题来了(现场环境为JDK1.6,服务器为windows server,DB服务器为redhat):

        奇特现象一、每次APP启动的时候,去访问后端,后端第一次查询数据库,总会报一个奇怪的socket read timed out,第二次访问就好了。

        奇特现象二、APP有一段时间不操作(间隔时间不定),再次点击APP进行操作,也会报这个异常。

        接到现场反馈以后,第一反映是网络问题。但是两个服务器之间的网络确实没问题。于是开始爬坑,

    首先:去配置mybatis自带的envirment中的 

  
        
            
            
                
                
                
                
                
                
                
                
                
                
            
        
    

     启动项目却被莫名其妙告知,我用的DataSource是UnpooledDataSource。

     本着现场事故大于天的心里,删掉了自己写的SqlSessionFactory,加入了高大上mybatis-spring-1.1.0和C3P0数据库连接池。然后重新发往现场,这时C3P0 配置如下:

        
    
        
        
        
        
        
        
        
        
        
        
    

没想到问题更加严重了,出现该问题的频率变大了。后来再次调整最后配置如下:

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

同时还对tomcat并发数做了调整。重启后至今为发现再次出现。