playframework - Play Framework、Ebean 和 HikariCP 是如何连接的?

标签 playframework ebean playframework-2.4

我正在将 Ebean 与 Play 2.4 一起使用,但我不清楚如何处理与 JDBC 池的连接。目前我只是创建一个 EbeanServer 并用它向数据库发出请求。

有人可以阐明这个主题吗? PlayFramework、Ebean 和 HickariCP 是如何连接的?我需要配置什么吗?我需要担心将此设置投入生产吗?

最佳答案

Play Framework

Play Framework 是您用来开发应用程序的框架。几乎所有应用程序都需要某种类型的数据存储,而这(在大多数情况下)由数据库提供。

连接池

现在,为了访问此数据库,您需要检索连接,然后使用这些连接 - 执行 INSERT、UPDATE 等。没有人阻止你自己管理这一切。但是有些人对这个主题有更好的了解,他们创建了所谓的连接池(CP)实现 - 这些库为你做了大部分肮脏的工作 - 他们关心获得有效的连接,他们关心管理“准备就绪”的连接池,以便您不会浪费时间,他们关心正确关闭数据库连接等等。大多数时候,您并不真正直接与连接池实现进行交互。之所以会出现这种情况,是因为作为开发人员,您的工作水平更高。

有不同的 CP 实现 - HikariCP , BoneCP , c3p0等等。 Play Framework 2.4 中默认的是 HikariCP,2.3 中默认的是 BoneCP。

ORM

与数据库连接一样,当使用某些模型并从数据库中保存/检索它们时,您不想处理低级别的内容。你想要一些抽象。

在您的应用程序中,您已经建模了一些东西 - 比如说一个在线商店 - 您有产品、订单、客户等等。您已经编写了一些代表这些实体的 Java/Scala 类 - 带有一些字段的 Product.java 、带有一些字段的 Order.java 等等。现在,如果您有一个关系数据库(例如 PostgreSQL、Oracle、MySQL 等),您就知道您有包含行和列的表。因此,为了保存数据,您需要将其映射到这个基于表的结构。这就是 ORM 实现发挥作用的地方。 ORM 是对象关系映射的缩写。这就像每个类和字段如何对应于表和列的蓝图。

与连接池一样,有不同的 ORM 实现 - Hibernate , Ebean等等。 Ebean 是以前 Play 版本中的默认设置。


碰巧 Play 框架带有一些默认值。您可以完全自由地在 Play 中交换几乎所有内容 - 您甚至可以更改模板引擎。好处是这些都是合理的默认设置 - 如果你想构建一些东西而不需要太多的闲逛 - 只需从默认选择开始即可。如果您的架构正确,那么替换特定实现的工作量应该是最小的。


关于生产设置的最后一点:如果没有适当的措施并且不了解您的用例,没有人可以说生产性能是否良好。您可以在此处阅读有关调整 Play 的 JDBC 端的更多信息:https://playframework.com/documentation/2.4.x/SettingsJDBC

我希望本文能够概述 Play、HikariCP 和 Ebean 之间的关系。

关于playframework - Play Framework、Ebean 和 HikariCP 是如何连接的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34427105/

相关文章:

email - 在 Heroku 托管的 Play Framework 2 应用程序上通过 Mandrill 对电子邮件进行错误的内容传输编码。在本地工作

java - Ebean:奇怪的结果

java - 具有枚举字段类型的 Ebean 模型意外生成的演化脚本

java - Play 框架(Java)-Ebean : PersistenceException: No ScalarType registered

intellij-idea - Play Framework 2.4 和 IntelliJ Idea

forms - In Play 2.4.0 如何在嵌套表单的多字段约束中命名字段?

intellij-idea - 如何在 IntelliJ IDEA 中以 Debug模式运行 Play Framework 2.x?

java - Play 框架 2.1 中的 Kerberos 身份验证

java - 玩2.5迁移: com. google.inject.CreationException: 无法创建注入(inject)器

java - 使用@play.cache.NamedCache(value=session-cache) 注释的 play.cache.CacheApi 的实现没有绑定(bind)到 Production