dropwizard和hibernate中的主从

时间:2016-11-03 14:33:20

标签: mysql hibernate dropwizard master-slave

我有一个用Dropwizard编写的应用程序,并使用hibernate连接到DB(mysql)。由于新功能的发布,我期待读取apis的高负载并考虑提供从数据库的读取。我可以通过哪些不同的方式配置主从和权衡。

2 个答案:

答案 0 :(得分:1)

我解决的方式:

  1. 在我的案例中,我有两个会话工厂:一个是默认与主人谈话,另一个是名字说" slaveDb"与奴隶数据库交谈。

  2. 我为同一个实体创建了不同的dao用于从属交互,一个用于master。在slave dao中我将它与slaveSessionFactory绑定

  3. 现在,工作单元注释有一个属性" value"如果你不使用它,我们在很多情况下都没有使用它,那么注释处理器将在默认会话工厂之上进行通信。如果在此处定义名称,则注释处理器将使用具有该特定名称的会话工厂。

  4. P.S。在我的情况下,我有一个单一的奴隶,因为应用程序不是那么高的负载,我想奴隶只是为了报告生成目的。在许多奴隶的情况下,这种解决方案不能很好地扩展。另外,当我在config.yaml文件中提供slave机器详细信息时,我不需要将底层连接设置为只读。

答案 1 :(得分:0)

如果您正在使用@UnitOfWork Annotation,那么不,是的。 不,他们不直接允许您使用只读通信数据库。 是的,您可以使用不同的db(主从)创建两个资源。 一个用于写入的资源和批判性读取(主控)另一个用于只读(从属)的资源。

https://groups.google.com/forum/#!topic/dropwizard-user/nxURxVWDtEY

同样作为链接建议mysql驱动程序可以自动执行此操作,但对于该会话,readOnly应为true,即使在@UnitOfWork中将readOnly设置为true,UnitOfWorkApplicationListener也无法正确设置。