使用 JPA 和 Hibernate 在 Persistence.xml 中配置 C3P0

2023-12-20

好吧,我第一次尝试使用 JPA + Hibernate + Spring 配置 C3P0。在 persistence.xml 我有:

<properties>
    <property name="hibernate.show_sql" value="false" />
    <property name="hibernate.format_sql" value="false" />
    <property name="hibernate.hbm2ddl.auto" value="update" />
    <property name="hibernate.cache.use_second_level_cache"
        value="false" />
    <property name="hibernate.cache.use_query_cache" value="false" />
    <property name="hibernate.jdbc.batch_size" value="50" />

    <!-- Important -->
    <property name="hibernate.connection.provider_class"
        value="org.hibernate.connection.C3P0ConnectionProvider" />

    <property name="hibernate.c3p0.max_size" value="20" />
    <property name="hibernate.c3p0.min_size" value="5" />
    <property name="hibernate.c3p0.acquire_increment" value="1" />
    <property name="hibernate.c3p0.idle_test_period" value="3000" />
    <property name="hibernate.c3p0.max_statements" value="50" />
    <property name="hibernate.c3p0.timeout" value="300" />
</properties>

但是当我尝试初始化tomcat时,出现以下错误:

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)
    ... 58 more
50570 [Thread-4] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - could not complete schema update
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)

EDIT 1:

这是我的applicationContext.xml,我如何在其中配置C3P0?

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <!-- Seta anotaçoes para serem usadas pelo Spring -->
    <context:annotation-config />

    <!-- Define o pacote onde o Spring vai procurar por beans anotados -->
    <context:component-scan base-package="br.com.myapp" />

    <!-- define que as transaçoes irao ser anotadas -->
    <tx:annotation-driven proxy-target-class="true" />

    <!-- Configuracao do Banco de Dados -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url" value="jdbc:postgresql://localhost/mydatabase" />
        <property name="username" value="postgres" />
        <property name="password" value="pgadmin" />
    </bean>

    <!-- Configuracao do Hibernate -->
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="senderPU" />
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
                <property name="showSql" value="true" />
            </bean>
        </property>
    </bean>

    <!-- Configuracao do gerente de transacoes do Spring -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

</beans>

您的配置有缺陷。您正在配置DataSource在应用程序上下文中。所以基本上都是hibernate.c3po属性没用,其次是设置hibernate.connection.provider_class属性会破坏您的应用程序。这C3P0ConnectionProvider需要 C3P0 连接,但是您使用的是基本的DriverManagerDataSource.

我建议不要尝试让 hibernate 来管理池,只需在应用程序上下文中配置它即可。将您的数据源定义替换为以下内容

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!-- Connection properties -->
    <property name="driverClass" value="org.postgresql.Driver" />
    <property name="jdbcUrl" value="jdbc:postgresql://localhost/mydatabase" />
    <property name="user" value="postgres" />
    <property name="password" value="pgadmin" />
    <!-- Pool properties -->
    <property name="minPoolSize" value="5" />
    <property name="maxPoolSize" value="20" />
    <property name="acquireIncrement" value="1" />
    <property name="maxStatements" value="50" />
    <property name="idleConnectionTestPeriod" value="3000" />
    <property name="loginTimeout" value="300" />
</bean>

并删除hibernate.c3p0 and hibernate.connection.provider_class来自你的 persistence.xml。将配置移至 Spring 的另一个优点是,您可以使用属性文件来包含您的属性,并将它们替换为PropertyPlaceHolderConfigurer而不是将它们固定在 persistence.xml 中

基本上,您可以从 persistence.xml 中删除所有属性并将它们移至基于 spring 的配置。

2 其他非相关建议。您可以删除<context:annotation-config />这已经暗示了<context:component-scan />。建议在标头中使用无版本 xsd 文件,因此我建议删除版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JPA 和 Hibernate 在 Persistence.xml 中配置 C3P0 的相关文章

  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类

随机推荐

  • 使用 cancel_at_period_end true 检测 Stripe 订阅的自动取消

    在我的 Stripe Connect 应用程序中 我想处理 Stripe customer subscription deleted 付款尝试失败后自动取消订阅时生成的 webhook 基于付款失败的订阅设置 The 条纹文档 https
  • R Shiny:如何动态附加任意数量的输入小部件

    The goal I am working on a Shiny app that allows the user to upload their own data and focus on the entire data or a sub
  • 使用 JavaScript 获取字符串中 @char 旁边的文本

    我正在基于 React 的聊天应用程序中实现提及机制 当用户在文本区域中键入 时 我将打开该组成员的列表 并使用 字符后面的文本在该列表中执行搜索 搜索查询提取的代码如下 const regexp S g const text regexp
  • 自定义 UITableViewCell、UITableView 并允许在编辑期间进行多重选择

    我使用时遇到问题iOS 5在编辑模式下选择多个单元格的新功能 应用程序结构如下 gt UIViewController gt UITableView gt CustomUITableViewCell where UIViewControll
  • 如何查询 Android MediaStore Content Provider,避免出现孤立图像?

    我正在尝试提供一个应用程序内活动 该活动显示照片缩略图 设备的媒体存储 并允许用户选择一个 用户做出后 选择后 应用程序会读取原始的全尺寸图像并对其进行处理 我正在使用以下代码创建一个Cursor覆盖外部的所有图像 贮存 public vo
  • 访问类中的类属性的 Pythonic 方法

    我想知道您认为如何从类内的函数访问类属性 我还没有在 PEP8 中找到参考资料 也没有找到关于它的常见问题 例如 class MyClass object BAR 1 def foo self Way A print self BAR Wa
  • 边界椭圆

    我被分配了一个图形模块的作业 其中一部分是计算一组任意形状的最小外接椭圆 椭圆不必与轴对齐 这是使用 AWT 形状在 java euch 中工作的 因此我可以使用形状提供的所有工具来检查对象的包含 相交 您正在寻找椭圆体最小包围体积 htt
  • 在 AngularJS 字符串中使用 HTML 实体

    给定 scope 模型中包含 HTML 实体的字符串 如何确保该实体正确显示为 HTML 字符而不是文字字符串 HTML 实体 MDN 术语表 https developer mozilla org en US docs Glossary
  • 计算选项集合中出现次数的惯用方法

    我想计算选项集合中某个值出现的次数 let v vec Some 1 Some 1 Some 3 None v iter filter Some x x 1 count 这样做会给出refutable pattern not covered
  • 如何管理企业分发证书过期?

    我们的客户刚刚加入 iOS 开发者企业计划 他们已使用其企业发行版签署了该应用程序 由我们开发 并通过 MDM 在某些设备中成功安装了该应用程序 据我所知 当我的非企业分发证书到期时 我必须更新它 一旦设备根据 Apple 的 OCSP 服
  • 如何通过javascript检测浏览器中是否按下停止加载按钮?

    如何通过 javascript 检测浏览器中是否按下停止加载按钮或页面是否仍在加载 假设脚本到达浏览器并且在按下 停止加载按钮 时不会停止执行 这可能是一个可行的选择 使用它仍然可以有未加载的资源 但会给你一个良好的开端
  • 在小写和大写之间添加空格?

    当字符串中包含大写字符或下划线时 我想添加一个空格 我该怎么做呢 实施例1 您可以使用匹配小写字符后跟大写字符的正则表达式 并在以下字符之间添加可选的下划线 string output Regex Replace input a z A Z
  • 车把动态部分块

    我有一个像这样的文件夹结构 components foo index js foo handlebars foo scss bar index js bar handlebars bar handlebars 为了方便地解析组件部分 我提供
  • UIImagePickerController 第一次打开速度很慢,双击时除外

    我在 iOS 9 上遇到了这种非常奇怪的行为 我有一个tableViewCell这会打开一个imagePicker当点击拍摄某物的照片时 当您第一次点击单元格时 需要大约 10 秒才能打开选择器 但是当您点击它两次时 它会立即打开 选择器的
  • 将数据写入assets目录下的.properties文件

    我的资产文件夹中有 config properties 我尝试获取数据并将其写入该文件 当我尝试获取数据 getProperty 时 一切正常 但是何时写入 setProperty 我在日志和数据中收到 java io IOExceptio
  • Meteor:将 Mongo Selector 从客户端传递到服务器的最佳方法

    我有一个如下所示的 mongo 集合 Foo X 键 Bars 值 编辑 我来自关系数据库背景 显然我的收藏不像下面这样 但你明白了 Foo1 Foo2 Foo3 Barbar Barbar Bar bar Bar BarBar Bar b
  • 添加新项目时更新列表

    使用 Angular 7 我有以下服务 StackBlitz 示例 https stackblitz com edit mk angular sync list Injectable providedIn root export class
  • Plon:如何对文件夹项目进行排序

    我有一个名为myfolder 里面有一些项目 例如 item1 item2 item3 等等 当我添加 portlet 时Navigation到页面左栏 并输入到文件夹中myfolder 它向我展示了 portlet 上的链接 如下所示 i
  • 如何将变量和数据从 PHP 传递到 JavaScript?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 我在 PHP 中有一个变量 我在 JavaScript 代码中需要它的值 如何将我的变量从 PHP 转换为 JavaScrip
  • 使用 JPA 和 Hibernate 在 Persistence.xml 中配置 C3P0

    好吧 我第一次尝试使用 JPA Hibernate Spring 配置 C3P0 在 persistence xml 我有