2013-12-15 42 views
3

我使用jOOQ 2.6.1和從Tomcat池(docs),我已經設置autocommit爲true。AutoCommit不能用於jOOQ 2.6.1和Tomcat池

PoolProperties p = new PoolProperties(); 
p.setDefaultAutoCommit(true); 
p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" + 
         "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); 
p.setRemoveAbandoned(true); 
p.setRemoveAbandonedTimeout(10); 

然後創建一個Apache DataSource對象:

org.apache.tomcat.jdbc.pool.DataSource dataSource = new DataSource 
dataSource.setPoolProperties(p); 

我用的是LazyConnectionDataSourceProxy從春:

LazyConnectionDataSourceProxy lazyConnection = new LazyConnectionDataSourceProxy(dataSource); 


從jOOQ 2.6.1使用工廠

public Factory createFactory() { 
    Settings settings = new Settings(); 
    settings.getExecuteListeners().add(
      "de.si.srv.data.SpringExceptionTranslationExecuteListener"); 
    return new Factory(dataSource, SQLDialect.POSTGRES, settings); 
} 

如果我例如選擇這樣做:

createFactory().select().from().fetch() 

... jOOQ應自動關閉連接!但是jOOQ不會關閉連接。所有連接都會在一段時間後放棄。

有沒有人知道我的問題的解決方案?我想讓jOOQ自動關閉連接!或者我應該使用其他池化框架?

哪個更適合jOOQ?

回答

1

目前已遍佈jOOQ 3.X該地區相當多的變化和修復,其中最重要的一個是:

or should i use an other pooling framework ?

我不認爲其他在這裏,彙集框架將有所幫助。

如果你想繼續使用jOOQ 2.6.1(而不是升級到3.2 jOOQ),我猜你可能需要或者工作:

  • 補丁jOOQ和解決這個問題
  • 處理的DataSource/Connection生命週期,並將Connection傳遞給jOOQ
+0

jooq 3.x ist的問題是我們必須遷移很多事情。修補這個問題會更容易。但我不知道從哪裏開始。我應該完全修補哪些代碼? – user2115378

+0

我同意,遷移到jOOQ 3.x的影響對於這樣的問題可能太大了。但是該領域的各種修復並非微不足道。修補它們並不容易。如果您希望我們的幫助爲jOOQ 2.6.x解決此問題,您可以[通過支持渠道與我們聯繫](http://www.jooq.org/support#a=support-custom-engineering)獲得幸運,或者[用戶組](https://groups.google.com/forum/#!forum/jooq-user)。您要評估這是否比自己維護連接生命週期更簡單。無論如何,我認爲這超出了這個堆棧溢出問題的範圍。 –

+0

大多數時候它的工作與廢棄的連接greate,因爲我已經設置了選項「setRemoveAbandoned(true); setRemoveAbandonedTimeout(10);」因此連接正在返回到池中。但有時我會得到以下錯誤:this exc:org.springframework.jdbc。UncategorizedSQLException:jOOQ;未分類SQLException for SQL ... SQL狀態[null];錯誤代碼[0];連接已關閉。嵌套異常是java.sql.SQLException:Connection has been been closed。「如果你知道」連接已經關閉「的解決方案問題,這將對我有幫助 – user2115378