2017-04-06 164 views
3

我想用spring引导使用jooQ。我有主从机架构,所以我想用主从机架构的jooQ(主机写&从机读取)。jooQ spring boot多模式(读写分割)

我应该如何继续。我现在用的pom.xml配置jooQ

<configuration> 
    <jdbc> 
     <driver>com.mysql.jdbc.Driver</driver> 
     <url>${datasource.primary.url}</url> 
     <user>${datasource.primary.username}</user> 
     <password>${datasource.primary.password}</password> 
    </jdbc> 
    <generator> 
     <name>org.jooq.util.DefaultGenerator</name> 
     <database> 
      <name>org.jooq.util.mysql.MySQLDatabase</name> 
      <includes>.*</includes> 
      <excludes/> 
      <inputSchema>jpa</inputSchema> 
     </database> 
     <generate> 
      <deprecated>false</deprecated> 
     </generate> 
     <target> 
      <packageName>com.gensrc.model</packageName> 
      <directory>src/main/java</directory> 
     </target> 
    </generator> 
</configuration> 

,然后就自动装配的DSLContext

但我怎么改变现在我的代码。

+0

你究竟想要做什么?我怀疑你有两个用户或模式或数据库(一个用于写作,一个用于阅读),但他们是如何相关的,你期望jOOQ做什么? - *“但是我现在怎么改变我的代码” - 你是什么意思? –

+0

我有两个不同的数据库在两台不同的服务器上。两者都是相互复制的。一个用于读取(从)和其他用于写入(主)。我想将所有写入查询路由到master以及我所有的读取查询。 –

回答

0

从您的评论:

我想我的路线全部写查询掌握&我所有的读取查询的奴隶。

我不太确定write = master,read = slave这个硬性区别是个好主意。有时,您可能需要从主服务器读取相同的事务边界(即回读未提交的数据),以便将读取查询发送给从服务器会产生错误的结果。

因此,实现此路由的最佳位置应该是将单独的DataSource实例相应地注入到jOOQ中。然后,您将明确地将服务层中的主服务器和从服务器分开,对于jOOQ是透明的。

你可以,当然,使用jOOQ ExecuteListener,并通过提供jOOQ具有取决于查询类型(ExecuteContext.type())右JDBC Connection实现你的原始需求,但同样,我认为这将相当很快打破。

+0

是的,我知道这种方法基本上是创建两个数据源,然后注入jooQ。但是,我如何将数据源注入jooQ。我目前正在自动装配采用主要数据源的DSLContext。我试图用@Qualifier初始化DSLContext,但它没有被初始化。你可以分享相同的代码吗? –

+0

是的,这是一个常见的情况下使用主写读操作,这也将完成,如果我能够将数据注入JooQ DSLContext注入。 –

+0

@AnkitBansal:你有很多问题:)但他们都没有在你的实际问题文本。你介意在堆栈溢出问一个新的问题,你有每个问题陈述吗?如果有疑问,这里有一个方便的页面来解释堆栈溢出如何工作:http://stackoverflow.com/tour –