2017-04-06 48 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 –