- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 ZIO 应用程序中使用 Doobie,有时会出现死锁(应用程序完全卡住)。如果我仅在一个内核上运行我的应用程序,或者达到与数据库的最大并行连接数,就会发生这种情况。
我的代码看起来像:
def mkTransactor(cfg: DatabaseConfig): RManaged[Blocking, Transactor[Task]] =
ZIO.runtime[Blocking].toManaged_.flatMap { implicit rt =>
val connectEC = rt.platform.executor.asEC
val transactEC = rt.environment.get.blockingExecutor.asEC
HikariTransactor
.fromHikariConfig[Task](
hikari(cfg),
connectEC,
Blocker.liftExecutionContext(transactEC)
)
.toManaged
}
private def hikari(cfg: DatabaseConfig): HikariConfig = {
val config = new com.zaxxer.hikari.HikariConfig
config.setJdbcUrl(cfg.url)
config.setSchema(cfg.schema)
config.setUsername(cfg.user)
config.setPassword(cfg.pass)
config
}
或者,我在 Hikari (
config.setLeakDetectionThreshold(10000L)
) 上设置了泄漏检测参数,但出现泄漏错误并不是由于处理数据库查询所花费的时间。
最佳答案
Doobie 文档中有关于执行上下文和对每个上下文的期望的很好的解释:https://tpolecat.github.io/doobie/docs/14-Managing-Connections.html#about-transactors
根据文档,“等待连接到数据库的执行上下文”(问题中的 connectEC
)应该是有界的。ZIO
,默认情况下,只有两个线程池:
zio-default-async
– 有界,zio-default-blocking
– 无界zio-default-async
因为它是有界的。
zio-default-async
假设它的操作永远不会阻塞。这非常重要,因为它是
ZIO
使用的执行上下文。解释器(它的运行时)运行。如果你阻止它,你实际上可以阻止
ZIO
的评估进程。程序。当只有一个内核可用时,这种情况会更频繁地发生。
zio-default-async
对于这个执行上下文。
connectEC
创建一个新的线程池和相应的执行上下文是否有意义? ?没有什么禁止您这样做,但可能没有必要,原因有以下三个:
ZIO
线程池人体工程学开始针对它们的使用进行很好的优化// zio.interop.catz._ provides a `zioContextShift`
val xa = (for {
// our transaction EC: wait for aquire/release connections, must accept blocking operations
te <- ZIO.access[Blocking](_.get.blockingExecutor.asEC)
} yield {
Transactor.fromDataSource[Task](datasource, te, Blocker.liftExecutionContext(te))
}).provide(ZioRuntime.environment).runNow
def transactTask[T](query: Transactor[Task] => Task[T]): Task[T] = {
query(xa)
}
我绘制了 Doobie 和 ZIO 执行上下文如何相互映射的图:
https://docs.google.com/drawings/d/1aJAkH6VFjX3ENu7gYUDK-qqOf9-AQI971EQ4sqhi2IY
关于concurrency - 将 Hikari 事务器用于 Doobie 和 ZIO 时遇到死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64371510/
我有一个 Spring Boot 2 应用程序,它有两个数据源。两个数据源都可以工作,但是我无法更改诸如最大池大小之类的属性,我的更改没有生效。 我在 application.properties 文
在我公司的项目中,我们使用 Hikari 进行连接池管理。[Hibernate 4.3.5 + Spring 4 + Java 1.8]下面是配置 hibernate.connection.provi
我使用带有 Hikari 连接池、jpa 和 postgres 的 spring boot 2。 是否有任何理由继续使用这些选项 spring.datasource.testOnBorrow=true
我很高兴你们能给我在 HikariCP 文档中找不到的答案。鉴于我设置了以下池参数: minimumIdle 1 idleTimeout 10 minutes maxLifeTime 20 minut
我使用 HikariCP 和 jdbc 模板从一个数据库进行查询。我使用的方法如下: 我的 Hikari CP 配置文件(hikari.properties): driverClassName=org
我想了解更多关于使用 Hikari 处理连接池的信息。 我面临的问题是连接将达到最大值,即 250,然后回到 10。有两件事我想知道/调整 为什么连接数达到最大值然后又回到 10?如何检查后台发生了什
我想了解 Slick-Hikari 的工作原理,我已经阅读了很多文档,但我有一个我不理解其行为的用例。 我在默认配置下将 Slick 3 与 Hikari 一起使用。我已经有一个同时连接约 1000
我正在尝试为我的 Web 应用程序配置 HikariCP。我没有使用任何框架,它是一个简单的 Java Web 应用程序。当我尝试通过普通 JDBC 建立连接时,它成功了,我能够执行所有数据库操作。
光 CP 版本:2.7.4 这实际上不是问题,而是一些疑问。 a) maxLifetime :30 分钟后退出连接。它会在杀死它时自动创建一个新连接还是等待新请求然后创建一个新连接?考虑到 pool
我想将 Hikari 池配置为在应用程序启动时而不是在发出第一次查询时急切地初始化。 截至目前,spring initializr 项目显示在第一次查询时提供了 hikari 池。 重现问题 - 使用
我在哪里可以找到有关可以在运行时修改的 Hikari 属性的信息?我尝试修改connectionTimeout。我可以做到,它将在 HikariDataSource 中无一异常(exception)地
光:2.4.7 PostgreSQL JDBC 驱动程序:9.4-1201-jdbc41 我试图了解必须对 java.sql.Connection 对象执行哪些操作才能使其在 连接池? 我刚刚向一个多
我在哪里可以找到有关可以在运行时修改的 Hikari 属性的信息?我尝试修改connectionTimeout。我可以做到,它将在 HikariDataSource 中无一异常(exception)地
我在使用 HikariCP 和 Google App Engine for JEE 时遇到问题。 尝试访问网站时,我记录了错误: com.zaxxer.hikari.pool.HikariPool$P
我正在使用 Hikari 连接池管理器来查询 AS400 计算机中的一些表。 我设置了最少 1 个连接池连接,最多 10 个。我同时查询 5 个表。 问题是,尽管在查询之前使用 HikariDataS
我使用 Controller 、服务、存储库和 bean 配置类创建 Web 项目,为了创建 DataSource 我使用 Hikari,但是当我运行项目时出现异常 Caused by: java.s
public DataSource createHikariDatasource(String url, String username, String password, String driver
我们有一个位置服务应用程序,它从 MySQL 数据库向我们的其他应用程序提供位置相关信息。由于某种原因,定位服务在接收多个请求时,无法连接MySQL数据库。我们观察到,当同时获取连续15-20个请求时
我们的项目中有 Spring-boot/Hibernate/MYSQL 应用程序,并使用 Hikari 作为连接池。几分钟后,当我们的服务启动时,我们发现了以下问题: org.springframew
如何在 ignite 上管理资源。 考虑到我正在开发的应用程序,我有一些我曾经保留的连接(JDBC/SAP/其他)。我曾经将所有连接保存在一个池中并使用 HIKARI 管理它们。鉴于现在我可以拥有一个
我是一名优秀的程序员,十分优秀!