首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过Symfony2控制台命令使用主/从doctrine2配置

如何通过Symfony2控制台命令使用主/从doctrine2配置
EN

Stack Overflow用户
提问于 2014-02-27 20:24:21
回答 2查看 10.6K关注 0票数 6

我使用Symfony2中的Doctrine2主/从配置跨单个主数据库和多个只读(复制)从数据库扩展应用程序。

这在我的应用程序中工作得很好,Doctrine2明智地使用从服务器进行只读查询,使用主服务器进行写操作。

如果在我的一个控制器中,我写道:

代码语言:javascript
运行
复制
$em = $this->get('doctrine')->getManager();
var_dump($em->getConnection()->isConnectedToMaster());

isConnectedToMaster()返回false --这是我所期望的,因为默认情况下从机是连接的。

如果我在WebTestCase中运行此代码,也会出现这种情况

但是,如果我在Symfony控制台命令(ContainerAwareCommand)中编写完全相同的代码:

代码语言:javascript
运行
复制
$em = $this->getContainer()->get('doctrine')->getManager();
var_dump($em->getConnection()->isConnectedToMaster());

isConnectedToMaster()返回true。这意味着主节点被选为默认值。

我找不到如何从控制台命令中停止默认连接。这意味着如果我想从控制台运行一些非关键的、繁重的数据处理任务-它们都会命中主机(坏的),而不是一个从(好的)。

有谁知道如何让Doctrine2从控制台默认使用从机?或者知道为什么它总是缺省为master?

回答:感谢nifr让我走上了正确的道路-我发现我的问题是因为我使用了JMS\JobQueueBundle (它将应用程序/控制台使用的应用程序替换为一个更改的应用程序,该应用程序必须以一种强制选择“主”的方式连接到MasterSlaveConnection )。当我注释掉

代码语言:javascript
运行
复制
use JMS\JobQueueBundle\Console\Application;

app/console中,在我的控制台测试中正确选择了从节点。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-27 21:20:51

您必须确保您的命令不会调用任何让doctrine选择主连接的操作。

对于理解MasterSlaveConnection来说,重要的应该是它如何以及何时选择从或主服务器。

如果以前从未选择过主,且仅当使用了'getWrappedConnection‘或'executeQuery’时,

  • 才会选择从属。当'exec','executeUpdate',‘’,'delete','update','createSavepoint','releaseSavepoint','beginTransaction','rollback','commit',‘called.
  • If’或'prepare‘表示查询主连接被挑选一次在连接的生存期内,它将始终被挑选,而从连接在请求期间被随机挑选一次。

(MasterSlaveConnection API)

票数 9
EN

Stack Overflow用户

发布于 2018-09-18 18:01:23

当我在寻找一种方法来询问我的主人是否要写作,或者我的奴隶是否需要阅读时,我最终解决了这个问题。

下面是它的魔力:

主设备写操作(使用):$em->getConnection()->executeUpdate(...);

从设备读取操作(使用从设备):$em->getConnection()->executeQuery(...); (

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

https://stackoverflow.com/questions/22068459

复制
相关文章

相似问题

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