Grails

2012-05-15 24 views
5

'da varsayılan işlem yalıtım düzeyi nasıl belirlenir Grails uygulamasında varsayılan işlem yalıtımı düzeyinin nasıl belirtileceğini anlayamıyorum. Lütfen yardım et ve hatanın nerede olduğunu göster. Detaylar aşağıdadır.Grails

Grails: 1.3.7

Veritabanı: SQL Server 2008.

DataSource.groovy:

dataSource { 
    ... 
    driverClassName = "net.sourceforge.jtds.jdbc.Driver" 
    dialect = org.hibernate.dialect.SQLServerDialect 
    defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED 
} 

hibernate { 
    ... 
    connection.isolation = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED 
} 

Sonra uygulamanın gezinmek ve aynı aşağıdaki sorguyu yürütmek ediyorum süresi:

SELECT session_id, host_name, program_name, login_name, status, transaction_isolation_level 
FROM sys.dm_exec_sessions 
WHERE host_name IS NOT NULL AND login_name = 'cm' 
ORDER BY host_name, program_name 

verir:

2 READ_COMMITTED anlamına gelir. 1'i, yani READ_UNCOMMITTED'i görmeyi bekliyorum.

açıkça belirtirseniz

: beklendiği gibi @Transactional (izolasyon = Isolation.READ_UNCOMMITTED)

sorgu yukarıdaki 1 döndürür. Ancak, tüm hizmetlerimi başvurumda belirtmek istemiyorum. Neyi eksik? Bu özellikleri altında ayarlanması gerekir

cevap

6

ben birden DS'nin datasources üst kısmında

bir tanımlama gibi bu bir varyasyon biraz var datasource configuration yani

dataSource { 
  ... 
  driverClassName = "net.sourceforge.jtds.jdbc.Driver". 
  dialect = org.hibernate.dialect.SQLServerDialect 
    properties { 
      defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED. 
    } 
} 
+0

Cevabınız için teşekkürler. Bunu denedi. Uygulama başlatılamadı. Günlük hatası: org.springframework.beans.NotWritablePropertyException: Fasulye sınıfı [org.springframework.jdbc.datasource.DriverManagerDataSource] 'ın geçersiz özelliği' defaultTransactionIsolation ': Bean özelliği' defaultTransactionIsolation 'yazılabilir değil veya geçersiz bir ayarlayıcı yöntemi vardır. Setterin parametre tipi, getterin dönüş tipiyle eşleşiyor mu? java.sql.Connection.TRANSACTION_READ_UNCOMMITTED yerine 1 yazıp diğer özellikleri başlatmayı denediğimde aynı özel durumla başarısız olur. –

+0

Bunu bir Oracle veri kaynağı kullanarak denedim ve şu hatayı aldım: 'PoolableConnectionFactory oluşturulamıyor (READ_COMMITTED ve SERIALIZABLE geçerli tek işlem seviyesidir). Dolayısıyla, ayarın veri kaynağına bağlı olabileceği anlaşılıyor. Veri kaynağı yapılandırması için bir 'readOnly' özniteliği vardır, bunun yerine bunu kullanmanızı öneririm. – krock

+1

Andrey, sorununuzu gidermek için dataSource altında "pooled = true" eklemeniz gerekiyor. –

4

ait öznitelik özelliklerinin paylaşılan harita (ortamınıza ayar bu):

def defaultConnectionProperties = [ 
    maxActive: 50, 
    maxIdle: 25, 
    minIdle: 5, 
    initialSize: 5, 
    minEvictableIdleTimeMillis: 60000, 
    timeBetweenEvictionRunsMillis: 60000, 
    maxWait: 10000, 
    defaultTransactionIsolation: java.sql.Connection.TRANSACTION_READ_UNCOMMITTED 
] 

Daha sonra her DS bir şey gibi:

dataSource { 
    pooled = true 
    driverClassName = "net.sourceforge.jtds.jdbc.Driver" 
// driverClassName = "com.p6spy.engine.spy.P6SpyDriver" // use this driver to enable p6spy logging 
    //readOnly = "true" 
    properties = defaultConnectionProperties 
} 

Grails uygulamanızı yeniden başlatın.

garip şey ilk transaction_isolation_level = 2 görüyorum, ama aslında DB bağlantısı vurduğunda özellikleri ayarlamak gibi görünüyor ve bir 1.

için o harfinin Ayrıca inceleyebilir geçerli: grailsApplication.config ve Veri kaynaklarını arayın ve ayarları doğrulayın.