当前位置: 首页 > 知识库问答 >
问题:

使用c3p0时出现MySQL Hibernate连接问题

端木宏盛
2023-03-14

我有一个使用Struts1.3、Hibernate3和Spring Security开发的web应用程序。由于MySQL在此时间之后关闭了连接,该应用程序在8小时后就停止了运行。然后我从几个帖子中收集信息,使它保持很长时间,现在差不多是20-24小时。有没有人能帮我把这东西弄好。

摘要

Iam在不活动20小时后无法登录。连接被MySQL关闭。

多谢了。

    <property name="hibernate.dialect">se.etm.ewo.hibernate.CustomDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">MY_JDBC_URL?autoReconnect=true</property>
    <property name="hibernate.connection.username">username</property>
    <property name="hibernate.connection.password">password</property>
    <property name="hibernate.connection.autoReconnect">true</property>
    <property name="hibernate.connection.autoReconnectForPools">true</property>
    <property name="hibernate.c3p0.idle_test_period">100</property>
    <property name="hibernate.c3p0.preferredTestQuery">select 1</property>
    <property name="hibernate.c3p0.testWhileIdle">true</property>
    <property name="hibernate.c3p0.testConnectionOnCheckout">true</property>
    <property name="hibernate.c3p0.min_size">10</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">update</property>
    <property name="hibernate.current_session_context_class">thread</property>
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />

    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="hibernateProperties">
        <ref bean="hibernateProperties" />
    </property>
</bean>

<bean id="hibernateProperties"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="location">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
</bean>

<!-- Data source -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass">
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="jdbcUrl">
        <value>MY_JDBC_URL?autoReconnect=true</value>
    </property>
    <property name="user">
        <value>username</value>
    </property>
    <property name="password">
        <value>password</value>
    </property>
    <property name="initialPoolSize">
        <value>10</value>
    </property>
    <property name="maxPoolSize">
        <value>30</value>
    </property>
    <property name="minPoolSize">
        <value>10</value>
    </property>
    <property name="maxConnectionAge">
        <value>3600</value>
    </property>
    <property name="maxIdleTime">
        <value>3600</value>
    </property>
    <property name="maxIdleTimeExcessConnections">
        <value>1800</value>
    </property>
    <property name="acquireRetryAttempts">
        <value>3</value>
    </property>
    <property name="acquireRetryDelay">
        <value>3000</value>
    </property>
    <property name="breakAfterAcquireFailure">
        <value>false</value>
    </property>
    <property name="preferredTestQuery">
        <value>SELECT 1</value>
    </property>
    <property name="testConnectionOnCheckout">
        <value>true</value>
    </property>
</bean>
<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref bean="sessionFactory" />
    </property>
</bean>

C3p0日志

INFO AbstractPoolBackedDataSource:462-正在初始化c3p0池...com.mchange.v2.c3p0.CombopooledDataSource[acquireIncrement->3,AcquireTretryActempts->3,AcquireTretryDelay->3000,autoCommitOnClose->false,automaticTestTable->null,breakAfterAcquireFailure->false,checkoutTimeout->0,connectionCustomizerClassName->null,connectionTesterClassName->Com.mchange.v2.c3p0.Impl.DefaultConnectionTester,s->3,numThreadsAwaitingCheckoutDefaultUser->0,preferredTestQuery->SELECT 1,properties->{user=******,password=******},propertyCycle->0,testConnectionOnCheckin->false,testConnectionOnCheckout->true,UnreturndConnectionTimeout->300,usesTraditionalReflectiveProxies->false]

c3p0日志显示的正是这些行,没有任何与问题相关的内容。你能找到什么。

共有1个答案

沈巴英
2023-03-14

TestWhileIdle不是c3p0属性。它不会伤害什么,但可能会让你迷惑,以为你在做一些你不是的事情。您正在测试空闲连接,可能太频繁了,因为您也在测试结账时的连接。

您的配置分散在两个地方。我不确定Spring和hibernate配置将如何交互。c3p0数据源在池初始化信息处转储配置。您可能需要验证是否具有所需的配置。

你的问题,听起来很像你有一个连接泄漏。您必须确保从数据源签出的任何连接在finally方法中都是可靠的close()ed,或者通过Java7+中的try-with-resources。

看这里。

(注意:在hibernate.cfg中,它们是hibernate.c3p0.unreturnedConnectionTimeouthibernate.c3p0.debugunreturnedConnectionStackTraces。或者您可以在Spring XML中更直接地设置它们。)

 类似资料:
  • 问题内容: 自上次发布以来,是否提出了所有建议的更改,但此问题仍然困扰着我。这是我得到的错误: 这是我的hibernate.cfg.xml 和c3p0.properties 问题答案: 对于我来说,您配置的c3p0错误。 诸如c3p0.preferredTestQuery之类的属性必须位于类路径中的c3p0.properties文件中(例如WEB-INF / classes)。 下面是我的c3p0

  • 我在Ubuntu 14.04中使用XAMPP for linux。在终端上启动服务时,打印下一个日志: sudo /opt/lampp/lampp启动 "开始XAMPPLinux5.5.30-0... XAMPP:正在启动Apache。。。好啊 XAMPP:正在启动MySQL。。。已经在运行了。 XAMPP:开始ProFTPD...好的。" 我不知道为什么当我第一次启动XAMPPm时,MySQL服

  • 问题内容: 我试图在使用selenium和phantomjs webdriver的linux服务器上运行python脚本;但是,我不断收到以下错误消息: 这是一个失败并生成此错误的简单测试脚本: 在路径上调用文件,返回: 有谁知道如何启动并运行该脚本?我已阅读了似乎类似的stackoverflow问题,并尝试应用建议的解决方案,例如通过npm重新安装幻像并使用sudo执行脚本,但是没有运气。如果我

  • 我正在使用resin服务器+spring框架和c3p0连接池。我已经使用以下属性文件配置了连接池。但不知怎的,每隔24小时左右,我的网站就会出现连接超时错误,然后我不得不重新启动我的resin服务器,让网站重新运行。请告诉我在下面的配置文件中有什么错误,以及我在这里缺少了什么。

  • 我正在尝试用android studio连接到我的Azure sql云数据库。运行代码时,我遇到了以下错误:“由于客户端TLS版本低于服务器允许的最低TLS版本,登录失败。”我已经尝试将azure的lts设置为1.0版本。 公共类MainActivity扩展AppCompatActivity { }

  • 我有一个IP地址每次我收到连接失败的消息时,我都尝试了很多连接到该服务器的方法。出于安全原因,我隐藏了用户名和密码。 代码: 我有例外 组织。postgresql。util。PSQLException:连接尝试失败。在org。postgresql。果心v3。连接工厂impl。org上的openConnectionImpl(ConnectionFactoryImpl.java:292)。postgr