Maven 2 使用带有Spring 3.1的c3p0时,无法从MySQL DB获取连接&;冬眠4

Maven 2 使用带有Spring 3.1的c3p0时,无法从MySQL DB获取连接&;冬眠4,maven-2,spring-3,c3p0,hibernate-4.x,Maven 2,Spring 3,C3p0,Hibernate 4.x,从mysql数据库获取连接时,我遇到了一个令人沮丧的错误。我将c3p0与Spring3.1和Hibernate4一起使用 任何帮助都将不胜感激!提前谢谢 关于 以下是我的maven池依赖项: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <versi

从mysql数据库获取连接时,我遇到了一个令人沮丧的错误。我将c3p0与Spring3.1和Hibernate4一起使用

任何帮助都将不胜感激!提前谢谢

关于


以下是我的maven池依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <!-- Hibernate c3p0 connection pool -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${hibernate.version}</version>
    </dependency>

请检查您的日志。在上面显示的异常之前,c3p0会记录堆栈跟踪,详细说明尝试从数据库获取连接失败的池。如果将日志记录级别设置为FINE(如果需要特定的日志记录程序,请使用com.mchange.v2.resourcepool.basicResourceSourcePool),您将看到记录的每个失败尝试。如果将日志级别保留为常规信息(或警告),则在失败尝试的“一轮”中只会看到最终失败的尝试(默认情况下为30次失败尝试,重试延迟为1秒)。如果您已经登录了INFO,您应该已经能够在日志中找到这些异常


请注意,在配置中,您已经定义了一些c3p0配置参数多达三次,有时甚至不一致。这并不是问题的原因,但它有点不雅观,并留下了一些不确定的值将实际采取。例如,maxPoolSize、hibernate.c3p0.max_size和hibernate.c3p0.maxPoolSize都是沿着相同的c3p0参数向下滴流的。如果您想查看实际设置的值,请检查您的日志(在信息中),查看初始化时生成的配置转储c3p0池。

请检查您的日志。在上面显示的异常之前,c3p0会记录堆栈跟踪,详细说明尝试从数据库获取连接失败的池。如果将日志记录级别设置为FINE(如果需要特定的日志记录程序,请使用com.mchange.v2.resourcepool.basicResourceSourcePool),您将看到记录的每个失败尝试。如果将日志级别保留为常规信息(或警告),则在失败尝试的“一轮”中只会看到最终失败的尝试(默认情况下为30次失败尝试,重试延迟为1秒)。如果您已经登录了INFO,您应该已经能够在日志中找到这些异常


请注意,在配置中,您已经定义了一些c3p0配置参数多达三次,有时甚至不一致。这并不是问题的原因,但它有点不雅观,并留下了一些不确定的值将实际采取。例如,maxPoolSize、hibernate.c3p0.max_size和hibernate.c3p0.maxPoolSize都是沿着相同的c3p0参数向下滴流的。如果您想查看实际设置的值,请查看您的日志(在信息中),查看初始化时生成的配置转储c3p0池。

非常感谢您的帮助和关心。。正如您在说明中所提到的,一些重复的配置参数是在这种不一致的情况下出现的。。“保持简单”这句格言在这种情况下总是有用的。非常感谢你的帮助和关心。。正如您在说明中所提到的,一些重复的配置参数是在这种不一致的情况下出现的。。“保持简单”这句格言在这些情况下总是有用的。。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="com.mysql.jdbc.Driver" />
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ext4playground" />
    <property name="user" value="xx" />
    <property name="password" value="xx" />
    <property name="maxPoolSize" value="10" />
    <property name="initialPoolSize" value="3" />
    <property name="maxStatements" value="50" />
    <property name="minPoolSize" value="3" />
    <property name="idleConnectionTestPeriod" value="100" />
    <property name="maxIdleTime" value="200" />
    <property name="acquireIncrement" value="1" />
</bean>

<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource"><ref local="dataSource"/></property>
    <property name="packagesToScan" value="com.tk.sample.ext4.model" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.format_sql">false</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.generate_statistics">true</prop>
            <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
            <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
            <!-- c3p0 properties -->
            <prop key="hibernate.c3p0.min_size">2</prop>
            <prop key="hibernate.c3p0.max_size">50</prop>
            <prop key="hibernate.c3p0.timeout">300</prop>
            <prop key="hibernate.c3p0.max_statements">50</prop>
            <prop key="hibernate.c3p0.idle_test_period">3000</prop>
            <prop key="hibernate.c3p0.acquireRetryAttempts">30</prop>
            <prop key="hibernate.c3p0.acquireIncrement">5</prop>
            <prop key="hibernate.c3p0.initialPoolSize">2</prop>
            <prop key="hibernate.c3p0.maxPoolSize">50</prop>
            <prop key="hibernate.c3p0.maxIdleTime">300</prop>
            <prop key="hibernate.c3p0.maxStatements">50</prop>
            <prop key="hibernate.c3p0.minPoolSize">2</prop>
            <prop key="hibernate.c3p0.preferredTestQuery">SELECT 1;</prop>
            <prop key="hibernate.c3p0.testConnectionOnCheckout">true</prop>                
        </props>
    </property>
</bean>

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<tx:annotation-driven/>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
org.springframework.transaction.CannotCreateTransactionException: **Could not open Hibernate Session for transaction**; nested exception is org.hibernate.exception.GenericJDBCException: **Could not open connection**
at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:440)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.startTransaction(TransactionalTestExecutionListener.java:513)
at org.springframework.test.context.transaction.TransactionalTestExecutionListener.startNewTransaction(TransactionalTestExecutionListener.java:271)
at org.springframework.test.context.transaction.TransactionalTestExecutionListener.beforeTestMethod(TransactionalTestExecutionListener.java:164)
at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:358)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:73)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:304)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1309)
    at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:399)
    ... 23 more
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
    at org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:79)
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:279)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
    ... 28 more
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
    ... 32 more