10
回答
spring+mybatis+druid数据库连接不释放,请教大神!
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

小弟在做一个spring定时任务,大约一分钟执行一次,一次完成大约需要执行数据库中3600万左右个select查询,现在问题来了,每次结束一次任务后,mybaits访问数据库 的链接没有关闭,随之执行次数的增多,会打开欲来越多的链接,最终导致挂掉。。。。请问各位技术大牛怎么解决这个问题?上图!

<无标签>
举报
共有10个答案 最后回答: 2周前
    <bean id="PropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:db.properties"/>
    </bean>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="driverClassName">
            <value>${jdbc_driverClassName}</value>
        </property>
        <property name="url">
            <value>${jdbc_url}</value>
        </property>
        <property name="username">
            <value>${jdbc_username}</value>
        </property>
        <property name="password">
            <value>${jdbc_password}</value>
        </property>
        <property name="connectionProperties" value="config.decrypt=false" />
        <property name="filters" value="config,log4j" />
        <property name="maxActive" value="${jdbc_maxActive}" />
        <property name="initialSize" value="${jdbc_initialiSize}" />
        <property name="maxWait" value="60000" />
        <property name="minIdle" value="8" />
        <property name="timeBetweenEvictionRunsMillis" value="10000" />
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <property name="validationQuery" value="SELECT 'x' from dual " />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
        <property name="timeBetweenLogStatsMillis" value="600000" />
        <property name="removeAbandoned" value="true"></property>
        <property name="removeAbandonedTimeout" value="10"/>
    </bean>
    <!--配置mybatis配置文件-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:sqlMapConfig.xml" />
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ouc.edu.ssm.mapper"/>
        <!--<property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
    </bean>
    <!--配置自动扫描service-->
    <context:component-scan base-package="com.ouc.edu.ssm.service"></context:component-scan>

    <!--声明式事务管理 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

 

看配置文件实在看不出问题

too many connections可能是mysql默认设置的最大连接数只有151,

max_connections=151

C:\ProgramData\MySQL\MySQL Server 5.6\my.ini修改

--- 共有 1 条评论 ---
被抛弃的猫咪跟这个没有关系,改了之后还是不断的怎多! 3个月前 回复

你的查询应该没有结束,然后又一个连接去查询,导致连接越来越多。有没有单独测试过,查询3600万条数据需要多长时间?

--- 共有 2 条评论 ---
wangaowell多长时间执行一次定时任务?你的连接在连接池中应该是没有回收 3个月前 回复
被抛弃的猫咪定时任务执行完一次大约需要15秒左右,然后等待下一次的定时任务的开启,等到下一次执行开始时候,上次的链接并没有关闭。 3个月前 回复

看一下druid连接池配置的最大连接数是多少,有连接池,连接本身就是不被释放的。

--- 共有 1 条评论 ---
被抛弃的猫咪最大链接池数量设置的是40,前面的链接不能释放,后面 的越来越多,导致最后崩掉 3个月前 回复

结贴:分析原因,在使用spring的定时任务的配置文件一定要初始化一次,别贱吧搜搜的去初始化多次,否则会导致开启的连接数越来愈多,包括mybatis的文件也要初始化一次,就一次,不要再多了!

顶部