首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prooph事件存储(PDO)和Doctrine导致多个连接。

Prooph事件存储(PDO)和Doctrine导致多个连接。
EN

Stack Overflow用户
提问于 2019-10-01 08:07:56
回答 2查看 312关注 0票数 2

Situation

在Symfony 4.3中,我使用Prooph作为命令总线、事件总线和事件存储。由于并非每个聚合都需要事件源,所以我们还使用Doctrine来简单地CRUD那些简单的聚合。

在给定的域中,命令总线中配置了命令/处理程序,这些命令/处理程序使用事件源存储库或DBAL存储库。

当将此命令注入CLI命令时,在CLI上运行任何操作时都会产生多个db连接。

问题

在尝试删除/创建数据库时(用于原始安装或重置测试环境),Postgres拒绝,因为有另一个活动连接。

代码语言:javascript
复制
Could not drop database "api" for connection named default
An exception occurred while executing 'DROP DATABASE "api"':

SQLSTATE[55006]: Object in use: 7 ERROR:  database "api" is being accessed by other users
DETAIL:  There is 1 other session using the database.

  • I尝试禁用所有具有事件源存储库的命令,并且问题得到了解决。
  • --我尝试禁用所有具有DBAL存储库的命令,并且问题得到了修复。
  • ,我尝试不注入这个命令总线,问题就解决了。

因此,我可以安全地得出结论,当将带有PDO连接的服务与带有DBAL连接的服务结合使用时,问题就会出现。

解决方案(失败)

我想到的一个解决方案是为Prooph使用Doctrine $connection->getWrappedConnection()。显然,键入暗示不允许这样做(getWrappedConnection()返回一个Connection-interface),但是实际的DoctrinePDOConnection扩展了\PDO,如果它确实有效的话,我愿意接受这个问题!然而,没有效果,仍然有两个连接。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-04 07:06:49

简而言之,我使用延迟加载来确保在内核引导期间没有建立实际的DB连接。只需确保composer require symfony/proxy-manager-bridge,否则您的lazy: true将被忽略(因此,我认为它不是最初的解决方案)。

票数 0
EN

Stack Overflow用户

发布于 2019-10-01 21:40:45

MySQLEventStore的构造函数的第二个参数是PDO连接,参见https://github.com/prooph/pdo-event-store/blob/master/src/MySqlEventStore.php#L82。您可以为Doctrine和EventStore使用相同的PDO实例,但这有点危险,因为您可能会干扰它的事务处理。我建议在删除数据库之前关闭测试中的Doctrine连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58180534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档