连接池已达到最大容量



我已经将我的应用程序从java7更改为java8,因为我想尝试在方法上使用lambda表达式。

后来我不得不升级tomcat7到tomcat8,因为它不想再运行我的webservice了

现在,因为我把它改为tomcat8,我有一个连接池的问题:

到目前为止你做了什么?搜索了SO和谷歌,但找不到任何与我的问题相关的东西,除了C3P0设置,我还没有那么有经验。

<property name="connection_provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.minPoolSize">5</property>
<property name="c3p0.maxPoolSize">100</property>
<property name="c3p0.acquireIncrement">5</property>
<property name="c3p0.maxStatements">200</property>
<property name="c3p0.timeout">180</property>

有没有人对我有一个想法,或者我必须恢复到java7,因为我昨天没有任何问题。

add exception msg

SCHWERWIEGEND: Servlet.service() for servlet [RESTservice] in context with path [] threw exception [org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!] with root cause org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!

编辑17.08.2016:我按照链接中的建议重新编码了应用程序,它没有那么多要改变,只添加了entitymanager依赖并从现有的hibernate.cfg.xml中创建了一个persistence.xml。

到目前为止,源代码需要在实现上做一些改变,我已经有了注解和持久性导入,这对Hibernate语法来说并没有什么不同。

但是我做对了吗?在这种情况下,我在构造函数中创建了一个单独的JPA实例,并在任何地方使用它,我是否仍然需要关闭并在任何地方重新创建它?

至少我目前面临的问题是这个例外,它不允许我进一步实验。

javax.persistence.PersistenceException: No Persistence provider for EntityManager named ServicePU

我的persistence . xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
    <persistence-unit name="ServicePU">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:sqlserver://xyz" />
            <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
            <property name="hibernate.connection.username" value="xyz" />
            <property name="hibernate.connection.password" value="xyz" />
            <property name="hibernate.archive.autodetection" value="class" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

我希望MSSQL驱动程序不是这里的问题:=)

我在更新Tomcat时遇到了这个问题——这是由于没有显式地说明在我的一个实体类(使用@GeneratedValue注释)上处理公钥生成的方式造成的。

如果使用GenerationType,我也会得到相同的异常。AUTO而不是IDENTITY(用于自动递增主键)

public class myExampleClass {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;

看起来在每次访问DB之后都没有关闭事务。我建议使用JPA实体管理器或我个人偏好使用spring框架,无论如何,这个链接提供了一个简单的例子http://www.javawebtutor.com/articles/jpa/jpa-example-using-maven.php

最新更新