hibernate+spring +quartz 数据库连接超过最大连接数

时间:2021-03-13 08:20:30
最近碰到报这样的错:Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: User 'comservi_webapp' has exceeded the 'max_user_connections' resource (current value: 10)

是说数据库连接次数已经执行了最大连接数 

看了看项目确实是这样的,在服务器有一个web项目,算一个连接;
然后在另外一个服务器上用quartz定时的调任务,这里配置了9个trigger触发器。加起来就是10。

白天工作的时候,我需要查询数据,连接数据就连不上,报错。

这个问题怎样解决呢?是连接池的需要配更大吗?

下面是spring的配置:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">// 这里配置了close,那么每次连接用完就会关闭的
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property> 
 
    <property name="url"
value="jdbc:mysql://localhost/comservi_tractor?useUnicode=true&amp;characterEncoding=iso-8859-1&amp;zeroDateTimeBehavior=convertToNull">
</property> 
<property name="username" value="root"></property>
<property name="password" value="123456"></property> 
</bean>

11 个解决方案

#1


补充一下,spring配置,只是举个例子;

#2


建议调整 MySQL 配置文件中 max_user_connections 的值。

#3


可以在Spring的配置文件applicationContext.xml中配置一下:

 <!--连接池中保留的最小连接数。-->
        <property name="minPoolSize">
            <value>5</value>
        </property>
 
 <!--连接池中保留的最大连接数。Default: 15 -->
        <property name="maxPoolSize">
            <value>30</value>
        </property>

#4


destroy-method="close" 不是你说的那个意思。
是说被IoC容器管理的数据库连接池在卸载的时候要调用close方法。

你的问题不像是连接池配置问题啊。 是不是你用jdbc了结果没有关闭啊。

没有关闭的话,用过的连接没有还给连接池。

#5


引用 3 楼 wl_ldy 的回复:
可以在Spring的配置文件applicationContext.xml中配置一下:
XML code

 <!--连接池中保留的最小连接数。-->
        <property name="minPoolSize">
            <value>5</value>
        </property>
 
 <!--连接池中保留的最大连接数。Default: 15 -->……

这里说Default是15,那我才用了10个

#6


引用 4 楼 yingzhuo2011 的回复:
destroy-method="close" 不是你说的那个意思。
是说被IoC容器管理的数据库连接池在卸载的时候要调用close方法。

你的问题不像是连接池配置问题啊。 是不是你用jdbc了结果没有关闭啊。

没有关闭的话,用过的连接没有还给连接池。


我没有手动关闭,是用getHibernateTemplate()的相应方法,这都交给hibernate来做了。

#7


quartz 的 job 也是用的 hibernateTemplate吗?

#8


我也不知道问题在哪里,只是那天我上传新的模块,需重启tomcat服务器.启动后,导致公司后台系统不能用。就一直报Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: User 'comservi_webapp' has exceeded the 'max_user_connections' resource (current value: 10);

由于公司有两个服务器,web 项目在一个服务器A上,然后其他 Quartz部分的项目就放另外一个服务器B上,我把B关了,公司后台就立马能用了。

想到以后如果还有其他什么需求,需要结合quartz来做,添加trigger,那么就麻烦了。

求大家帮忙指点指点。谢谢 。。。

#9


引用 7 楼 yingzhuo2011 的回复:
quartz 的 job 也是用的 hibernateTemplate吗?


是的

#10


引用 2 楼 wl_ldy 的回复:
建议调整 MySQL 配置文件中 max_user_connections 的值。



就是这个答案。谢谢!

#11


该回复于2011-11-15 09:37:38被版主删除

#1


补充一下,spring配置,只是举个例子;

#2


建议调整 MySQL 配置文件中 max_user_connections 的值。

#3


可以在Spring的配置文件applicationContext.xml中配置一下:

 <!--连接池中保留的最小连接数。-->
        <property name="minPoolSize">
            <value>5</value>
        </property>
 
 <!--连接池中保留的最大连接数。Default: 15 -->
        <property name="maxPoolSize">
            <value>30</value>
        </property>

#4


destroy-method="close" 不是你说的那个意思。
是说被IoC容器管理的数据库连接池在卸载的时候要调用close方法。

你的问题不像是连接池配置问题啊。 是不是你用jdbc了结果没有关闭啊。

没有关闭的话,用过的连接没有还给连接池。

#5


引用 3 楼 wl_ldy 的回复:
可以在Spring的配置文件applicationContext.xml中配置一下:
XML code

 <!--连接池中保留的最小连接数。-->
        <property name="minPoolSize">
            <value>5</value>
        </property>
 
 <!--连接池中保留的最大连接数。Default: 15 -->……

这里说Default是15,那我才用了10个

#6


引用 4 楼 yingzhuo2011 的回复:
destroy-method="close" 不是你说的那个意思。
是说被IoC容器管理的数据库连接池在卸载的时候要调用close方法。

你的问题不像是连接池配置问题啊。 是不是你用jdbc了结果没有关闭啊。

没有关闭的话,用过的连接没有还给连接池。


我没有手动关闭,是用getHibernateTemplate()的相应方法,这都交给hibernate来做了。

#7


quartz 的 job 也是用的 hibernateTemplate吗?

#8


我也不知道问题在哪里,只是那天我上传新的模块,需重启tomcat服务器.启动后,导致公司后台系统不能用。就一直报Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: User 'comservi_webapp' has exceeded the 'max_user_connections' resource (current value: 10);

由于公司有两个服务器,web 项目在一个服务器A上,然后其他 Quartz部分的项目就放另外一个服务器B上,我把B关了,公司后台就立马能用了。

想到以后如果还有其他什么需求,需要结合quartz来做,添加trigger,那么就麻烦了。

求大家帮忙指点指点。谢谢 。。。

#9


引用 7 楼 yingzhuo2011 的回复:
quartz 的 job 也是用的 hibernateTemplate吗?


是的

#10


引用 2 楼 wl_ldy 的回复:
建议调整 MySQL 配置文件中 max_user_connections 的值。



就是这个答案。谢谢!

#11


该回复于2011-11-15 09:37:38被版主删除