2009-07-13 65 views
3

我有一個在Tomcat 6中運行的Web應用程序,我已經設法配置它使用內置的DBCP連接池,並且所有工作都很好,但是我懷疑它運行在錯誤的隔離級別數據庫。我希望它在讀取未運行的情況下運行,但我認爲它在讀取提交時運行,不知道如何設置它。我可以從Tomcat上下文中設置JDBC隔離級別嗎?

這裏是我的上下文的XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
    <Context antiResourceLocking="false" privileged="true"> 
     <Resource 
      name="jdbc/Connection" 
      auth="Container" 
      type="javax.sql.DataSource" 
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000" 
      driverClassName="net.sourceforge.jtds.jdbc.Driver" 
      url="jdbc:jtds:sqlserver://...etc..." 
     /> 
    </Context> 

這是用來獲取數據庫連接的Java方法。

public Connection getDatabaseConnection() throws ServletException { 
    try { 
     InitialContext cxt = new InitialContext(); 
     if (cxt == null) { 
      throw new ServletException("ServletContext unavailable."); 
     } 

     DataSource ds = (DataSource)cxt.lookup("java:/comp/env/jdbc/Connection"); 
     if (ds == null) { 
      throw new ServletException("Data source not found!"); 
     } 

     Connection conn = ds.getConnection(); 
     return conn; 
    } etc... 

已經獲得getDatabaseConnection()我知道我可以手動設置隔離級別與conn.setIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED)的連接,但是,感覺錯了,因爲它要麼涉及硬編碼的隔離級別到Java,或執行查找到每次需要新的連接時都要使用servlet上下文。

我可以在上下文XML中以某種方式定義這個,還是有更好的方法,我不知道?

回答

10

是的,您可以使用Resource元素中的defaultTransactionIsolation屬性進行設置。

<Context antiResourceLocking="false" privileged="true"> 
     <Resource 
      defaultTransactionIsolation="READ_UNCOMMITTED" 
      name="jdbc/Connection" 
      auth="Container" 
      type="javax.sql.DataSource" 
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000" 
      driverClassName="net.sourceforge.jtds.jdbc.Driver" 
      url="jdbc:jtds:sqlserver://...etc..." 
     /> 

從文檔:

defaultTransactionIsolation¨

由該池中創建 連接TransactionIsolation狀態。一個 如下:(見的javadoc)

  • NONE
  • READ_COMMITTED
  • READ_UNCOMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE
0

我一直在尋找的快照隔離級別。這是由數據庫服務器報告正確的設置是

defaultTransactionIsolation="4096"

您可以通過查詢sys.dm_exec_sessions應報告transaction_isolation_level = 5,希望它可以幫助別人確認。

相關問題